bakalárska práca - Prvý slovenský portál pre diplomové práce

Transcription

bakalárska práca - Prvý slovenský portál pre diplomové práce
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky
BAKALÁRSKA PRÁCA
Študijný odbor: Informatika
Matej Kurpel
Vývoj internátneho portálu
Campus portal development
Vedúci: Ing. Pavel Segeč, PhD.
Reg.č. 219/2008
reg. dňa 28. 10. 2008
Žilina
Anotačný list
RESUMÉ
Táto práca rozoberá problematiku návrhu a implementácie funkcií webovej aplikácie –
internátneho portálu pre potreby Internet Klubu, ubytovacích a stravovacích zariadení
Žilinskej univerzity a študentov ubytovaných na internátoch Žilinskej univerzity.
SUMMARY
This thesis deals with the problematics of designing and implementing functions of a web
application – campus portal for the needs of Internet Klub, catering and dormitory
establishments of University of Žilina and campus students from University of Žilina.
ABSTRAKT
KURPEL, Matej: Vývoj internátneho portálu [bakalárska práca] – Žilinská univerzita v
Žiline. Fakulta riadenia a informatiky; Katedra informačných sietí. – Vedúci: Ing. Pavel
Segeč, PhD. – Stupeň odbornej kvalifikácie: Bakalár v študijnom programe Informatika.
Žilina: FRI ŽU v Žiline, 2009. – 41 s.
Cieľom bakalárskej práce bolo navrhnúť a zrealizovať webovú aplikáciu – internátny portál –
s využitím dynamického obsahu. V teoretickej časti práce sú vysvetlené základné použité
pojmy z oblasti tvorby webových aplikácií. V ďalšej časti je vysvetlené, ako bol internátny
portál navrhnutý s ohľadom na modularitu a rozšíriteľnosť v budúcnosti, a ako fungujú jeho
základné vnútorné súčasti. Nakoniec je vysvetlené fungovanie niektorých modulov, ako z
používateľského, tak aj z administrátorského a programátorského pohľadu.
Kľúčové slová: Internet. Webová aplikácia. Webová stránka. Jazyk PHP. Jazyk JavaScript.
Jazyk MySQL. Ajax-ové volanie. Databáza. Modularita. Webový server. Klient. Prehliadač.
Skriptovanie na strane klienta. Šablóna. Administrácia. Správa obsahu. Užívateľ. Integrácia
s NMS. Jazyková lokalizácia. Webová anketa. Webový e-mailový klient. DirectConnect
(DC). DC hub.
ABSTRACT
KURPEL, Matej: Campus portal development [bachelor thesis] – The University of Žilina.
Faculty of Management Science and Informatics; Department of InfoComm Networks. –
Tutor: Ing. Pavel Segeč, PhD. – Qualification level: Bachelor in study program Informatics.
Žilina: FRI ŽU in Žilina, 2009. – 41 p.
The aim was to design and implement a web application – campus portal – using dynamic
content. In the theoretical part of the thesis it explains basic terms from the field of creating
web applications. In the following one it deals with how the campus portal was designed with
modularity and future extensibility in mind, and how its basic internal components work. At
last, operation of particular modules is explained, from the user’s, as well as from the
administrator’s and programmer’s standpoint.
Keywords: Internet. Web application. Web page. The PHP language. The JavaScript
language. The MySQL language. Ajax call. Database. Modularity. Web server. Client.
Browser. Client-side scripting. Template. Administration. Content management. User. NMS
integration. Language localization. Web poll. Web e-mail client. DirectConnect (DC). DC
hub.
PREDHOVOR
S rapídnym rastom dostupnosti internetu koncovým užívateľom sa čoraz viac kladie
do popredia dynamickosť a tiež interaktívnosť webových stránok. Je dôležité mať možnosť
spravovať obsah webovej stránky v reálnom čase bez nutnej znalosti programovania a nielen
to. Dynamický a interaktívny obsah ponúka netušené možnosti, ako „zatiahnuť“ užívateľa do
diania, poskytnutím možnosti hlasovania v anketách, prispievania do fóra a ďalších činností.
Starý internátny portál tieto možnosti neposkytoval. Väčšinu obsahu musel
administrátor ručne dopisovať do kódu. Z toho vznikla potreba vytvoriť nový, dokonalejší
internátny portál a okrem spomínaných výhod pritiahnuť pozornosť užívateľa príjemným
dizajnom. Portál je zameraný predovšetkým na študentov ubytovaných v ubytovacích
zariadeniach Žilinskej univerzity. Poskytuje informácie o dianí na ŽU, oznamy ubytovacích
a stravovacích zariadení, oznamy Internet Klubu. a ďalšie informácie.
Práca na internátnom portáli, oprava chýb a jeho udržiavanie sú mojou hlavnou
náplňou práce pre Internet Klub (IK). Týmto činnostiam sa venujem vo svojom voľnom čase
už od konca prvého ročníka. Mojou hlavnou ambíciou bolo naučiť sa pracovať s novými,
modernými technológiami v oblasti tvorby webových stránok a zlepšiť sa v tom, čo som už
predtým čiastočne ovládal. Preto som aj vyvíjal portál od základu, namiesto použitia už
hotového CMS. To by nemuselo spĺňať všetky požiadavky na funkcionality, ktoré by bolo
treba doprogramovať. Naviac získať dobrú orientáciu v cudzích zdrojových kódoch by mohlo
byť náročné. Z dôvodu, že vývojom portálu som strávil veľa času a pracoval som na ňom
priebežne počas väčšiny bakalárskeho štúdia, sa mi možnosť zvoliť si ho ako tému
bakalárskej práce javila ako veľmi vhodná. Dnes je portál v ostrej prevádzke na adrese
http://iklub.sk (resp. http://dorm.uniza.sk).
Čestne vyhlasujem, že som bakalársku prácu vypracoval samostatne s využitím
vlastných teoretických poznatkov i praktických skúseností, získaných nielen samoštúdiom,
ale i počas štúdia na Fakulte riadenia a infomatiky.
OBSAH
1
2
ÚVOD ...................................................................................................................... 1
TEORETICKÁ ČASŤ ........................................................................................... 2
2.1
ZÁKLADNÉ POJMY ................................................................................... 2
2.1.1
Internet .................................................................................................. 2
2.1.2
2.1.3
Web ....................................................................................................... 2
Webová stránka .................................................................................... 2
2.1.3.1
2.1.3.2
2.2
Statické webové stránky .............................................................. 3
Dynamické webové stránky ......................................................... 3
POUŽITÉ TECHNOLÓGIE ......................................................................... 4
2.2.1
Skriptovací jazyk na strane servera: PHP ............................................. 4
2.2.2
2.2.3
Skriptovací jazyk na strane klienta: JavaScript .................................... 5
Databázový systém: MySQL ................................................................ 5
2.2.4
2.2.5
XHTML ................................................................................................ 5
XML ..................................................................................................... 5
2.2.6
CSS ....................................................................................................... 6
2.3
POUŽITÉ PRODUKTY TRETÍCH STRÁN ................................................ 6
3
2.3.1
2.3.2
TinyMCE .............................................................................................. 6
Smarty ................................................................................................... 9
2.3.3
2.3.4
Scriptaculous ...................................................................................... 10
Šablóna „Ja Rochea“ .......................................................................... 10
V9ÚTOR9Á ORGA9IZÁCIA PORTÁLU ...................................................... 11
3.1
ŠTRUKTÚRA DATABÁZY ...................................................................... 11
3.1.1
Všeobecný pohľad na databázu .......................................................... 11
3.1.2
Účel a použitie tabuliek ...................................................................... 11
3.2
USPORIADANIE SÚBOROV A ADRESÁROV ....................................... 12
3.2.1
Súbory ................................................................................................. 12
3.2.2
Adresáre .............................................................................................. 13
3.3
MODULARITA – JADRO A SPOLUPRÁCA S MODULMI ................... 14
3.3.1
Úvod do modularity, úlohy jadra ........................................................ 14
3.3.2
Organizácia modulov .......................................................................... 14
3.3.3
Konfiguračné premenné modulov ...................................................... 16
3.3.4
Činnosti jadra vykonávané pri každom načítavaní stránky ................ 17
3.3.5
Činnosť modulov ................................................................................ 19
3.4
POPIS FUNKCIÍ ......................................................................................... 19
3.4.1
PHP funkcie ........................................................................................ 19
3.4.2
Funkcie JavaScriptu ............................................................................ 22
3.5
JAZYKOVÁ LOKALIZÁCIA .................................................................... 23
3.6
OŠETRENIE UŽÍVATEĽSKÝCH VSTUPOV A ZABEZPEČENIE ....... 25
3.7
INTEGRÁCIA S NMS ................................................................................ 26
3.8
RSS .............................................................................................................. 27
4
ADMI9ISTRAČ9É FU9KCIE .......................................................................... 30
4.1
VŠEOBECNÉ NASTAVENIA PORTÁLU ............................................... 30
4.2
SPRÁVA UŽÍVATEĽOV A ICH OPRÁVNENÍ ....................................... 30
4.3
HROMADNÉ INFORMOVANIE UŽÍVATEĽOV .................................... 32
4.3.1
Zaslanie hromadnej súkromnej správy ............................................... 32
4.3.2
Zaslanie hromadného e-mailu ............................................................ 32
5
POPIS FU9KCIÍ 9IEKTORÝCH MODULOV ............................................... 33
5.1
ANKETY ..................................................................................................... 33
5.2
5.3
INTEGROVANÝ E-MAILOVÝ KLIENT ................................................. 34
VYHĽADÁVANIE NA INTERNÁTNOM DC HUBE ............................. 34
6
7
8
OVERE9IE RIEŠE9IA ...................................................................................... 37
ZÁVER .................................................................................................................. 39
ZOZ9AMY ........................................................................................................... 40
8.1
ZOZNAM POUŽITÝCH SKRATIEK ........................................................ 40
8.2
ZOZNAM POUŽITÝCH ZDROJOV ......................................................... 41
8.3
ZOZNAM PRÍLOH ..................................................................................... 41
9
PRÍLOHY ............................................................................................................. 42
Príloha č. 1 ............................................................................................................... 42
Príloha č. 2................................................................................................................ 43
Príloha č. 3................................................................................................................ 44
Príloha č. 4................................................................................................................ 45
Príloha č. 5 ............................................................................................................... 46
1
ÚVOD
Moderné webové stránky umožňujú užívateľom spolupodieľať sa na tvorbe ich obsahu
a administrátorom umožňujú spravovať ich obsah on-line bez nutnosti úprav v zdrojovom
kóde či ručných úprav v databáze. Cieľom tejto bakalárskej práce je vyvinúť takýto webový
portál pre potreby ubytovacích a stravovacích zariadení Žilinskej univerzity, ale aj pre potreby
Internet Klubu a študentov. Dôraz sa kladie na dynamickú správu obsahu. Užívatelia môžu
vyjadriť svoje názory prispievaním do fóra, či hlasovaním v ankete. Každý z užívateľov môže
mať aj špeciálne oprávnenia navyše, trebárs na editáciu určitého druhu obsahu. Administrátori
môžu okrem iného prideľovať a odoberať takéto oprávnenia sebe i ostatným užívateľom.
Potreba nového internátneho portálu vyplýva z toho, že pôvodný internátny portál takéto
možnosti nemal.
Jednou z hlavných požiadaviek na návrh internátneho portálu je modularita. To
znamená rozdelenie istých (relatívne) nezávislých celkov portálu na moduly, s ktorými
pracuje jadro majúce zjednodušene za úlohu vykonať kód tých modulov, od ktorých je
požadovaný obsah a zobraziť výslednú stránku. Modularita zjednodušuje prácu s kódom a do
značnej miery zaručuje rozšíriteľnosť portálu v budúcnosti.
1
2
2.1
TEORETICKÁ ČASŤ
ZÁKLAD9É POJMY
2.1.1 Internet
Internet je celosvetová počítačová sieť poskytujúca užívateľom do nej pripojeným
rôzne služby. Jeho prvé uzly vznikli v roku 1969 pod názvom ARPANET pod správou
Ministerstva obrany Spojených štátov Amerických. Ranný výskum, ktorý prispel k vzniku
ARPANETu, bol z oblastí práce na decentralizovaných sieťach (z obranných dôvodov), teórie
hromadnej obsluhy a prepínania paketov. 1. januára 1983 zmenil ARPANET svoj základný
sieťový protokol z NCP na TCP/IP, čím vznikol internet ako ho poznáme dnes. [3]
2.1.2 Web
Internet získal širokú pozornosť verejnosti v 90. rokoch 20. storočia. V auguste 1991
Tim Berners-Lee publikoval svoj nový projekt World Wide Web, dva roky po tom, ako začal
s tvorbou značkovacieho jazyka HTML a protokolu HTTP. Zverejnil prvé stránky organizácie
CERN vo Švajčiarsku. Niekoľko akademických a vládnych inštitúcií tiež prispelo stránkami,
ale verejnosť ich zatiaľ nevidela. V roku 1993 bola vydaná prvá verzia webového prehliadača
(browsera) Mosaic, na vývoji ktorej sa výraznou mierou podieľal vtedy študent Marc
Andreessen. V roku 1994, ako 22 ročný spoluzakladateľ Netscape Communications
Corporation, ponúkol k stiahnutiu zadarmo prehliadač Netscape Navigator a tým sa začala
verejnosť zaujímať o dovtedy akademicko-technický internet. [3]
World Wide Web (skrátene Web alebo WWW) je najznámejšia služba internetu. Je to
veľmi veľká množina hypertextových dokumentov (web stránok), ku ktorým možno
pristupovať prostredníctvom internetu. Na to sa používa webový prehliadač, ktorého
základnou funkciou je stiahnutie dokumentu z webového servera a jeho zobrazenie
užívateľovi. Termíny web a internet bývajú laickou verejnosťou často mylne zamieňané.
2.1.3 Webová stránka
Webová stránka, ľudovo aj webstránka alebo ľudovo nepresne internetová stránka (po
anglicky „web page“), je dokument obsahujúci hypertext, obrázky a iné multimediálne prvky
uložený obyčajne na webovom serveri prístupný prostredníctvom služby World Wide Web v
sieti internet. Zobrazuje sa používateľovi pomocou webového prehliadača. Webové stránky sú
obyčajne písané v značkovom jazyku HTML alebo XHTML a prenos prebieha pomocou
protokolu HTTP [3]. Dokument webu si môže prehliadač stiahnuť po tom, čo si ho od servera
vyžiada. Prehliadač otvorí HTTP spojenie k serveru, pošle údaj o tom, ktorá stránka je
2
požadovaná a server vráti stavový kód a dáta. Stavový kód má väčšinou hodnotu 200, čo
znamená, že všetko je v poriadku (ďalší bežný stavový kód je 404 – požadovaný dokument
neexistuje). Ak všetko prebehlo v poriadku, prehliadač zobrazí užívateľovi stránku, obrázok,
alebo ponúkne na stiahnutie súbor, závisí akého typu sú dáta posielané webserverom. Typ
obsahu určuje HTTP hlavička Content-Type. HTTP hlavičky sú dodatočné metainformácie,
ktoré si vymieňajú web server a klient (prehliadač).
2.1.3.1 Statické webové stránky
V počiatkoch webu boli webové stránky aj umiestnené na web serveri ako dokumenty
HTML - statické stránky, čiže tak, ako boli posielané užívateľom. Ich obsah bolo treba meniť
ručne, zmenou priamo v HTML kóde.
2.1.3.2 Dynamické webové stránky
Postupom času sa správa statických webových stránok značne komplikovala s ich
pribúdajúcim počtom. Bolo časovo náročné aj udržiavať odkazy medzi nimi tak, aby boli stále
platné. Dynamické webové stránky sú výsledkom práce webového servera, ktorý vygeneruje
webovú stránku, či iný obsah, na základe inštrukcií v skriptoch. Dokument, ktorý prehliadač
požaduje, sa identifikuje názvom skriptu a cestou k nemu. Adresa dokumentu môže ešte
obsahovať tzv. query string – je to časť adresy za otáznikom, ktorá udáva parametre skriptu.
Skript môže na základe odlišných parametrov vygenerovať rôzny obsah.
Obr. 2-1: Query string
Existuje mnoho skriptovacích jazykov. Aby všetko fungovalo, musí webový server
skriptovací jazyk podporovať. Medzi populárne skriptovacie jazyky pre tvorbu dynamických
webových stránok patria PHP, ASP a Python. Zdrojom dát pre vygenerovaný obsah môže byť
aj databáza. Podporu rôznych databázových systémov mávajú skriptovacie jazyky
zabudovanú v sebe.
Popísaný spôsob generovania obsahu na serveri sa označuje termínom server-side
scripting. Jeho opakom je client-side scripting, tiež často označovaný ako dynamické HTML.
Skriptovanie na strane klienta nevyžaduje spoluúčasť webového servera a umožňuje zvýšiť
interaktivitu a pohodlie užívateľa. Akcie vyvolané skriptovaním na strane klienta sa prejavia
hneď napríklad po stlačení tlačidla na stránke, kliknutím na obrázok, či stlačením klávesy.
Vykonávaný kód môže meniť vzhľad stránky, manipulovať s oknom prehliadača, a robiť
mnoho ďalších operácií.
3
Obr. 2-2: Porovnanie fungovania Ajax-ovej webovej aplikácie oproti klasickej web. aplikácii
Kombináciou skriptovania na strane servera a na strane klienta je tzv. Ajax. Je to
moderná technológia určená na vytváranie vysoko interaktívnych webových aplikácií.
Umožňuje načítavanie a manipuláciu s dátami z webového servera bez nutnosti znovu
načítavať práve zobrazenú stránku. Užívateľ vykoná na stránke určitú akciu, na ktorú
zareaguje skript na strane klienta. Ten sformuje HTTP požiadavku na skript, ktorý sa
nachádza na serveri, ktorú mu odošle. Server spracuje požadovaný skript a pošle odpoveď
klientovi (prehliadaču). Skript na strane klienta túto odpoveď prevezme a spracuje trebárs tak,
že ju vypíše na určené miesto na stránke.
2.2
POUŽITÉ TECH9OLÓGIE
2.2.1 Skriptovací jazyk na strane servera: PHP
Z mnohých serverových skriptovacích jazykov bol vybratý práve jazyk PHP. Dôvod je
najmä ten. že je to najrozšírenejší skriptovací jazyk na strane servera používaný na tvorbu
4
dynamických stránok, preto má aj najlepšiu podporu u webových serverov. Najviac vlastností
prebral z jazykov C a Perl. Dokáže spolupracovať s relačnými databázami, obsahuje podporu
objektového programovania, pričom si zachováva jednoduchú a priamočiaru syntax. Beží na
webovom serveri, kde za vstup berie PHP skripty a ako výstup dáva webové stránky (ale
nemusí to byť pravidlom). PHP skripty majú zvyčajne príponu .php, ale je možné určiť inú
príponu špecifickým nastavením webového servera. Oficiálna stránka spolu s manuálom k
PHP sa nachádza na adrese www.php.net. Je šírený pod licenciou „PHP License v3.01”, ktorá
umožňuje použitie tohto jazyka zdarma.
2.2.2 Skriptovací jazyk na strane klienta: JavaScript
Pre účely skriptovania na strane klienta bol vybratý JavaScript práve preto, že má
najlepšiu podporu v prehliadačoch, preto je aj na webe najrozšírenejší. Syntaxou je podobný
jazyku C. Podporuje štruktúrované programovanie, aj keď je skoro celý objektovo
orientovaný. Časté použitie JavaScriptu spočíva v overovaní formulárov, a tiež v Ajax-ových
volaniach (viď kapitolu 2.1.3.2). To významne zvyšuje pohodlie užívateľa a interaktivitu
stránky.
2.2.3 Databázový systém: MySQL
MySQL je databázový systém veľmi často používaný na ukladanie údajov pre potreby
webových aplikácií. Najčastejšie sa používa spolu s PHP, ktoré obsahuje dobrú podporu pre
MySQL. Komunita okolo MySQL je veľká a aktívna, dokumentácia je kvalitná. MySQL je
dostupný pre takmer všetky unix-ové systémy i systémy Windows. Jeho licencia je
GNU/GPL, čo umožňuje jeho použitie zdarma.
2.2.4 XHTML
XHTML je tzv. značkovací jazyk používaný na tvorbu web stránok. Vychádza z
jazyka HTML, ale navyše spĺňa štandardy jazyka XML, čo umožňuje použitie syntaktického
analyzátora XML na analýzu XHTML dokumentov. Na internátnom portáli je použitý
XHTML 1.0 Transitional, čo je najmenej prísny štandard XHTML.
2.2.5 XML
XML je viacúčelový značkovací jazyk určený na výmenu štruktúrovaných dát. Jeho
sila je najmä v hierarchickej štruktúre a jednoduchom spôsobe zápisu. Na prvý pohľad sa
jazyk XML podobá jazyku XHTML, ale ich použitie je odlišné. XML elementy a ich atribúty
si, na rozdiel od XHTML, môže určiť sám autor dokumentu. Na portáli sa jazyk XML
používa presne na to, na čo je určený – na načítavanie štruktúrovaných dát zo servera, napr.
5
pri editácii oznamov. Server vygeneruje XML dokument obsahujúci požadované údaje a
prehliadač si z neho tieto údaje vytiahne a použije zamýšľaným spôsobom.
2.2.6 CSS
CSS – kaskádové štýly – je štýlovací jazyk používaný na určenie vzhľadu dokumentu
vytvorenom v značkovacom jazyku. To znamená, že dokument obsahuje len dáta, pričom
všetky informácie o tom, ako sa tieto dáta majú zobraziť (formátovanie, pozície) určujú
kaskádové štýly. Takéto oddelenie dát od ich vzhľadu znižuje komplexnosť web stránok.
2.3
POUŽITÉ PRODUKTY TRETÍCH STRÁ9
Pre niektoré pomocné funkcie portálu sa oplatí použiť už hotový kód. Je to
efektívnejšie, než vymýšľať, čo už bolo vymyslené od začiatku a robiť všetko vlastným
spôsobom. Na internete sa nachádzajú hotové, často používané časti webových stránok, ako aj
rôzne balíky funkcií, či frameworky pre PHP, JavaScript a mnoho ďalších. Táto kapitola
rozoberá elementy internátneho portálu prevzaté od tretích strán.
2.3.1 TinyMCE
TinyMCE je pokročilý WYSIWYG editor napísaný v JavaScripte. To znamená, že
užívateľ píše text a aplikuje naň formátovanie, a priamo vidí, ako to bude vyzerať. Editor
môže mať na nástrojovej lište viac tlačidiel – nielen na formátovanie textu, ale aj na správu
obrázkov na serveri, ich vkladanie do textu, či odosielanie súborov na server. Výstupom
editora je HTML kód. Na portáli sa používajú inštancie TinyMCE s dvomi rôznymi
konfiguráciami – užívateľskou a administrátorskou. Líšia sa funkciami, ktoré sú v nich
povolené.
Obr. 2-3: Užívateľské TinyMCE
6
Užívateľské TinyMCE povoľuje len jednoduché formátovanie textu a vkladanie
odkazov. Zľava sú tlačidlá na tučné písmo, kurzívu, podčiarknuté a preškrtnuté písmo.
Nasledujú tlačidlá pre tvorbu číslovaných a nečíslovaných zoznamov a tlačidlá na dolný a
horný index. Vpravo sa nachádzajú tlačidlá slúžiace na vkladanie odkazov do textu a ich
odstraňovanie. Toto nastavenie editora je používané vo fóre, kde sa môže vyjadrovať každý
prihlásený užívateľ.
Obr. 2-4: Administrátorské TinyMCE
Administrátorské TinyMCE obsahuje všetky funkcie bežne potrebné na správu
obsahu. V prvom riadku lišty nástrojov pribudli štyri tlačidlá pre zarovnanie textu. Na konci
prvého riadku sú dve tlačidlá určené na vkladanie obrázkov. Prvé z nich vloží do textu
obrázok, ktorý je dostupný na internete pod svojou webovou adresou a druhé otvorí správcu
obrázkov, ktorý umožňuje aj odosielať obrázky na server a vkladať ich do textu.
Na ukladanie informácií o takto odoslaných obrázkoch sa používajú dve tabuľky
databázy: images a image_folders. Adresáre v tomto správcovi obrázkov sú len virtuálne, v
skutočnosti sú na serveri obrázky v adresári upimages, ktorého obsah si spravuje sám správca
obrázkov.
7
Obr. 2-5: Správca obrázkov TinyMCE
Posledné tlačidlo v hornom rade lišty nástrojov slúži na otvorenie správcu súborov
uložených na serveri. Užívateľom, ktorí nemajú oprávnenie tohto správcu súborov používať,
sa jeho tlačidlo nezobrazí. Koreňový adresár pre správcu súborov je možné určiť pre každého
užívateľa zvlášť, pričom do nadradeného adresára nebude vpustený. Predvolený adresár je
download. Správca súborov umožňuje aj vloženie odkazu na súbor do textu, pričom je možné
určiť, či si v tomto odkaze užívateľ želá aj veľkosť súboru, jeho typ a ikonku.
V druhom riadku nástrojovej lišty administrátorského TinyMCE je ako prvá položka
zoznam so štýlmi. Sú tam umiestnené niektoré predvolené štýly textu, ktoré sa bežne na
portáli nachádzajú. Na pravom konci lišty sa nachádza tlačidlo na zobrazenie a ručné úpravy
vygenerovaného HTML kódu. V strede druhého riadka nástrojovej lišty sa nachádzajú tlačidlá
na tvorbu a úpravy tabuliek
Zásuvné moduly TinyMCE sú umiestnené v adresári plugins hlavného adresára
TinyMCE. Napríklad zásuvný modul pre správu obrázkov má názov iwimg a správca súborov
je tu pod názvom filemanager.
8
Obr. 2-6: Správca súborov TinyMCE
Niektoré zásuvné moduly pre TinyMCE bolo treba upraviť, inde bolo treba doplniť
jazykové reťazce pre slovenčinu, ktorá nebola v TinyMCE úplne podporovaná. Domovská
stránka projektu TinyMCE je na adrese http://tinymce.moxiecode.com/.
2.3.2 Smarty
Smarty je na webe hojne používaný šablónovací systém. Jeho poslaním je oddeliť
PHP kód od prezentačnej vrstvy (HTML, CSS). Na internátnom portáli sú jeho súbory
umiestnené v adresári smarty. PHP skripty, ktoré potrebujú Smarty-ho používať, odkážu sa na
súbor init.smarty.php, ktorý pripraví premennú $smarty (inštanciu Smarty-ho) pre použitie.
Bežné použitie Smarty-ho spočíva v nasledujúcich krokoch:
•
zahrnutie súboru init.smarty.php
•
priradenie obsahu PHP premenných Smarty-ho premenným metódou assign, napr.:
$smarty->assign('version',$version);
•
zobrazenie šablóny so Smarty-ho premennými nahradenými ich obsahom, napr.:
$smarty->display('main.tpl');
Smarty vlastne zoberie súbor šablóny, podopĺňa v ňom premenné kde treba,
vygeneruje z neho PHP súbor a ten dá webovému serveru na spracovanie. Webový server po
9
jeho spracovaní pošle výslednú stránku prehliadaču, ako zvyčajne. Domovská stránka je na
http://smarty.net/.
2.3.3 Scriptaculous
Scriptaculous je súbor JavaScriptových knižníc s efektmi. Súbory s tým súvisiace sú
uložené v adresári scripts/scriptaculous. Na portáli sa používa len jeden efekt z týchto
knižníc, a to je tzv. rolovací efekt pri odkrývaní a skrývaní oznamov a administračných
formulárov. Domovská stránka projektu je http://script.aculo.us/.
2.3.4 Šablóna „Ja Rochea“
Vzhľad stránky bol vybratý po konzultáciách s kolegami z Internet Klubu. Ako
najvhodnejšia alternatíva sa javila šablóna do CMS Joomla! s názvom Ja Rochea, ktorý bol
do značnej miery upravený pre potreby internátneho portálu. Ako vyzerala hlavná stránka
v čase písania tejto práce, je vidno v prílohe č. 3.
10
3
V9ÚTOR9Á ORGA9IZÁCIA PORTÁLU
3.1
ŠTRUKTÚRA DATABÁZY
3.1.1 Všeobecný pohľad na databázu
Logický i fyzický model databázy sú v prílohách č. 1 a 2. Na priloženom CD sa
nachádzajú v súboroch Logical.ER1 a Physical.ER1 – súbory programu Computer Associates
ERwin 4.1.4. Modely nezahŕňajú tabuľky prislúchajúce k e-mailovému klientovi. Export
databázy v tvare SQL dotazov je na priloženom CD v súbore db.sql. Tento súbor obsahuje
štruktúru tabuliek a ukážkové dáta.
Databáza portálu pozostáva z osemnástich tabuliek. Okrem tabuľky stlpce má každá
tabuľka jednoduchý primárny kľúč id typu int. Vzťahy medzi tabuľkami zabezpečujú cudzie
kľúče.
Referenčná integrita je síce udržiavaná už na úrovni aplikácie (v PHP skriptoch), ale
pre istotu bolo vhodné zriadiť ju aj na úrovni databázového systému, aby bolo zaistené, že
s databázou sa bude narábať správnym spôsobom. Predvolený úložný systém databázy
MySQL zvaný MyISAM, neobsahuje podporu cudzích kľúčov – neukladá a nepoužíva ich
[1]. Z toho dôvodu bolo nutné tabuľky previesť na tabuľky úložného systému InnoDB –
okrem tabuľky ftp_files, kde sa použitie úložného systému InnoDB prejavilo výrazným
spomalením operácií s ňou.
Všetky dátumy a časy sú ukladané ako unix timestamp (je to číslo udávajúce počet
sekúnd uplynutých od 1. januára 1970 00:00:00 GMT [2]) kvôli uľahčeniu porovnávania
a zoraďovania podľa dátumov. Dátový typ v MySQL je unsigned int. Všetky stĺpce, kde majú
význam len dve rôzne hodnoty (0 a 1), alebo jedna z malej množiny hodnôt, majú typ enum.
Databáza a všetky jej tabuľky i stĺpce majú porovnávanie utf8_unicode_ci.
3.1.2 Účel a použitie tabuliek
Táto kapitola popisuje, na čo ktorá tabuľka slúži. Podrobný popis jednotlivých
atribútov každej tabuľky sa nachádza v prílohe č. 5.
•
uziv – obsahuje informácie o registrovaných užívateľoch.
•
msg – obsahuje všetky súkromné správy.
•
oznamy – ukladajú sa do nej „rozklikávacie“ oznamy z modulov IK, Ubytovanie, ŽU
a titulnej stránky portálu.
•
odkazy – uchováva údaje pre modul odkazy.
11
•
image_folders – je súčasťou doplnku pre TinyMCE na uploadovanie obrázkov na
server a ich vkladanie do textu. Obsahuje informácie o virtuálnych adresároch pre
obrázky.
•
images – je taktiež súčasťou zásuvného modulu TinyMCE na odosielanie obrázkov na
server a ich vkladanie do textu.
•
dcsearch – používa sa na ukladanie výsledkov vyhľadávania na internátnom DC hube.
Jej obsah sa nemení až do ďalšieho vyhľadávania, kedy je celá vyprázdnená
a naplnená novými výsledkami.
•
config – slúži na ukladanie všeobecných konfiguračných premenných pre portál ako
celok.
•
stlpce – uchováva údaje o stĺpcoch s podstránkami, odkazmi a súbormi (sekciami) pre
moduly IK, Ubytovanie, ŽU.
•
stlpce_data – uchováva podstránky, odkazy a údaje o súboroch (sekciách) pre moduly
IK, Ubytovanie, ŽU.
•
ftp_servers – ukladajú sa v nej informácie o internátnych FTP serveroch, ktorých
obsah je možné indexovať a na ktorých je potom možné vyhľadávať.
•
ftp_files – obsahuje informácie o súboroch a adresároch, ktoré sa nachádzali v čase
indexovania na jednotlivých FTP serveroch.
•
forum_prispevky – obsahuje príspevky vo fóre.
•
forum_temy – obsahuje témy fóra
•
forum_kategorie – obsahuje kategórie fóra.
•
newsflash – ukladajú sa v nej novinky, ktoré sa zobrazujú v záhlaví stránky.
•
ankety – uchováva informácie o anketách.
•
ankety_odpovede – uchováva odpovede k anketám.
3.2
USPORIADA9IE SÚBOROV A ADRESÁROV
Z dôvodu prehľadnosti a logického rozčlenenia súborov, z ktorých sa portál skladá,
bolo dôležité navrhnúť štruktúru adresárov a do nej zaradiť súbory podľa toho, na čo slúžia.
Zaiste by nebolo vhodné miešať trebárs obrázky s CSS súbormi. Čo ktorý súbor či adresár
obsahuje, popisuje táto kapitola.
3.2.1 Súbory
Popis súborov nachádzajúcich sa v hlavnom adresári portálu:
•
class.AAClient.php, class.CryptedXMLRPCClient.php – triedy umožňujúce
spojenie s NMS
12
•
defines.php – definície konštánt
•
errors.tpl – doplnková šablóna obsahujúca potvrdzovacie a chybové hlášky, ktoré sa
používajú ako náhrada JavaScriptových funkcií confirm a alert. Táto šablóna je
zahŕňaná do hlavnej šablóny main.tpl na jej konci
•
favicon.ico – ikonka stránky pre uloženie do záložiek v prehliadači
•
functions.php – skript s PHP funkciami, ktoré sú využívané najmä jadrom. Podrobný
popis funkcií je uvedený v kapitole 3.4
•
index.php – hlavný súbor portálu
•
init.db.php – pomocný skript na inicializáciu spojenia s databázou
•
init.smarty.php – pomocný skript na inicializáciu šablónovacieho systému Smarty
•
main.en.lng, main.sk.lng – jazykové súbory jadra
•
main.tpl – hlavná šablóna, do ktorej sa zahŕňajú obsahy modulov atď.
•
mainconfig.php – konfiguračný súbor jadra, obsahujúci zoznam všeobecných
oprávnení
•
newsflash.php – skript vracajúci flash-novinky zobrazované v záhlaví stránky
•
robots.txt – informácie pre botov indexujúcich webový obsah
•
rss.php – skript vracajúci RSS XML súbor zvoleného modulu. Fungovanie RSS je
popísané v kapitole 3.8
•
rss.tpl – šablóna s kostrou RSS XML súborov
•
temperature.txt – cache súbor, kam sa ukladá nameraná teplota na Veľkom Dieli
•
tinymce_settings.tpl – nastavenia TinyMCE pre moduly, ktoré o to prejavili záujem
vo svojom konfiguračnom súbore (viď kapitola 3.3.3)
•
version.txt – dátum poslednej úpravy zdrojového kódu (informatívny).
3.2.2 Adresáre
•
/css – obsahuje CSS súbory
•
/download – adresár, kam sa ukladajú odoslané súbory sekcií typu „odkaz na uložený
súbor“ modulov ik, ubytko a zu. Tiež je to koreňový adresár pre zásuvný modul
TinyMCE s názvom filemanager, ktorý slúži na správu súborov na serveri a vkladanie
odkazov na ne do textu
•
/images – uchováva rôzne obrázky využívané portálom samotným
•
/images/headers – obrázky zobrazované v záhlaví stránky
•
/images/icons – ikony typov súborov používané pri výpise výsledkov vyhľadávania na
internátnom DC hube alebo FTP serveroch
•
/modules – adresár určený pre moduly. Má svoje ďalšie členenie určené organizáciou
modulov, ktorá je popísaná v kapitole 3.3.2
•
/rcmail – umiestnenie webmailu RoundCube
13
•
/scripts – adresár pre kódy JavaScriptu
•
/scripts/scriptaculous – adresár knižnice s efektami „Scriptaculous“
•
/scripts/tiny_mce – umiestnenie TinyMCE
•
/smarty – umiestnenie šablónovacieho systému Smarty
•
/upimages – adresár používaný doplnkom TinyMCE na upload obrázkov,
manipuláciu s nimi a ich vkladanie do textu, s názvom iwimg.
3.3
MODULARITA – JADRO A SPOLUPRÁCA S MODULMI
3.3.1 Úvod do modularity, úlohy jadra
Pri väčších softvérových projektoch, ako je tento, sa ukazuje monolitický návrh ako
nevýhodný; pridávaním nových funkcií by bolo treba meniť pôvodný kód, čo by bolo aj
časovo neefektívne. Preto, z dôvodu ľahšej rozšíriteľnosti do budúcna, bolo nutné navrhnúť
internátny portál modulárne. Jadro je obsiahnuté v súbore index.php, čo je hlavný súbor
celého portálu, no používa aj funkcie zo súboru functions.php. Práca s modulmi je úlohou
jadra, ktoré plní aj ďalšie úlohy, nutné k behu portálu ako celku:
•
inicializácia spojenia s databázou
•
zavedenie a príprava šablónovacieho systému Smarty, priradenie jeho premenných
tak, aby boli pripravené na zobrazenie v šablóne
•
spracovanie súboru s funkciami (functions.php)
•
spracovanie súboru s hlavnou konfiguráciou jadra (mainconfig.php), obsahujúceho
zoznam oprávnení patriacich k jadru, resp. všeobecných oprávnení
•
správa jazykov – načítanie jazykových súborov jadra i modulov
•
správa relácií
•
načítanie verzie (dátumu poslednej úpravy) zo súboru version.txt
3.3.2 Organizácia modulov
Moduly sú relatívne nezávislé časti portálu a sú umiestnené v podadresároch adresára
modules. Vzhľadom na rôzne úlohy rôznych modulov bolo nutné klasifikovať moduly podľa
toho, kde majú zobrazovať svoj obsah, teda i kedy sa majú vykonávať. Preto rozlišujeme tri
typy modulov:
•
content – sú určené na zobrazovanie v hlavnej časti stránky, čiže pod hlavičkou
a medzi ľavým a pravým stĺpcom
•
left_column – zobrazujú sa v ľavom stĺpci
•
right_column – zobrazujú sa v pravom stĺpci
14
Každý modul sa musí nachádzať vo svojom vlastnom adresári, ktorý je umiestnený
v niektorom z hore uvedených adresárov modulov, podľa typu. Štruktúra modulu, teda to,
z akých súborov sa skladá, je určená očakávaniami jadra a tým, čo všetko modul ponúka.
Názvy súborov, ktoré sú v moduloch rezervované pre špeciálne použitie a popis tohto
použitia:
•
modindex.php – hlavný (spúšťací) súbor modulu. Spustí sa vždy, okrem prípadu, že
je v konfiguračnom súbore modulu tento modul zakázaný. Každý modul musí tento
súbor obsahovať.
•
modconfig.php – konfiguračný súbor modulu, je pre každý modul povinný. Obsahuje
rôzne priradenia konfiguračných premenných, ktoré upresňujú, ako sa jadro má
k modulu správať. Popis konfiguračných premenných sa nachádza v kapitole 3.3.3. Na
konci súboru sa môže ešte nachádzať kód, ktorý sa má spustiť pri každom načítaní
stránky (keďže konfiguračné súbory modulov sa pri každom načítaní stránky
spracúvajú jadrom).
•
modscript.js – (alebo modscript.js.php pre moduly typu content) – nepovinný súbor
obsahujúci kód JavaScriptu patriaci k modulu. Odkaz naň je zaradený do hlavnej
šablóny v sekcii head, aby ho prehliadač našiel. Príponu .php má pre moduly typu
content preto, aby sa jeho obsah mohol dynamicky generovať podľa toho, aké má
užívateľ oprávnenia. Pomáha to zvýšeniu bezpečnosti, keď neoprávnený užívateľ ani
neuvidí funkcie pre editáciu obsahu a pod.
•
modlang.sk.lng, modlang.en.lng – súbory s jazykovými reťazcami. Modul ich
obsahovať nemusí, ak žiadne lokalizované reťazce vypisovať nepotrebuje.
•
modsearch.php – podpora vyhľadávania. Tento skript je volaný pri požiadavke na
vyhľadávanie v obsahu, ktorý modul sprístupňuje. Ak tento súbor v module existuje,
objaví sa preň zaškrtávacie políčko vo formulári pre vyhľadávanie. Podporu
vyhľadávania môžu obsahovať len moduly typu content, aj keď je to nepovinná
súčasť. Avšak ak modul obsahuje tento súbor, logicky musí obsahovať aj šablónu pre
výpis získaných výsledkov (modsearch.tpl).
•
modsearch.tpl – šablóna, do ktorej sa vypisujú výsledky vyhľadávania. Býva to
jednoduchá tabuľka, ktorá je neskôr zahrnutá do hlavnej šablóny pre výpis výsledkov
hľadania, čo umožňuje vypísanie výsledkov pre každý modul nezávisle a iným
spôsobom.
•
modrss.php – podpora RSS, ktorú môžu opäť obsahovať len moduly typu content.
Naplní sa tu údajmi pole, ktoré sa použije na výpis RSS XML súboru pomocou
šablóny rss.tpl. O túto činnosť sa nestará jadro, ale separátny skript rss.php. Viac
o RSS je uvedené v kapitole 3.8.
15
3.3.3 Konfiguračné premenné modulov
Konfiguračné premenné modulov sú nastavované v súbore modconfig.php. Upresňujú
spôsob, akým sa bude jadro k modulu správať a umiestňujú sa do asociatívneho poľa
$modconfig. Niektoré konfiguračné premenné musia byť nastavené v každom module, ďalšie
sú nepovinné, a niektoré majú význam len pri moduloch určitého typu. Popis všetkých
konfiguračných premenných:
•
$modconfig['enabled'] – premenná typu boolean určujúca, či je modul povolený. To
znamená, či ho jadro má vôbec spracovávať. Prepínaním tejto premennej je možné
vypínať a zapínať moduly. Každý modul musí túto premennú v konfiguračnom súbore
mať nastavenú.
•
$modconfig['uriitem'] – má význam len pre moduly typu content, kde určuje
parameter q adresy, ktorý tento modul jednoznačne identifikuje. Ak obsahuje reťazec
začínajúci sa http, potom tento modul slúži len ako položka menu odkazujúca na
nejakú externú stránku, ktorej adresa je touto premennou určená. Príkladom takéhoto
modulu je modul rcmail.
•
$modconfig['obr1'], $modconfig['obr2'] – obrázky v záhlaví stránky, ktoré sa dajú
určiť pre každý modul iné, aby portál nepôsobil priveľmi fádne. Obrázky sa
nachádzajú v adresári images/headers. Prvý z nich je ten hlavný, rozprestierajúci sa
cez celú šírku stránky a jeho optimálne rozmery sú 950x205 pixelov. Druhý, menší,
plynule nadväzuje na veľký obrázok a nachádza sa nad ľavým menu. Jeho rozmery sú
220x89 pixelov. Tieto premenné majú opäť zmysel len pri moduloch typu content.
•
$modconfig['menuitem'], $modconfig['menuitem_en'] – názov určený pre moduly
typu content, pod ktorým sa bude modul zobrazovať v menu, a jeho anglický
ekvivalent. Tieto dva názvy môžu byť aj prázdne reťazce. V tom prípade sa do menu
vôbec nezaradia, ale bude možné na ne odkazovať napríklad z iných modulov, a to
pomocou parametra q adresy.
•
$modconfig['order'] – poradie modulu vo výpise. Čím nižšie číslo, tým je modul
zaradený skôr. V moduloch typu content to ovplyvňuje poradie modulov v menu
a v ostatných dvoch typoch modulov poradie výpisu v stĺpcoch (ľavom či pravom),
kde moduly s nižším poradovým číslom sú vyššie
•
$modconfig['tinymce'] – určuje, či sa má pri výpise šablóny pripojiť odkaz na skript
TinyMCE a jeho predvolenú inicializáciu. Tú možno prekryť vlastnou inicializáciou
(ak napr. modul potrebuje iné tlačidlá na nástrojovej lište) – takto to robí modul forum
zahrnutím súboru forum.tinymce_settings.tpl do šablóny. Nastavenie tejto hodnoty na
false pri moduloch, ktoré TinyMCE nepotrebujú, má výhodu v zrýchlení načítavania
stránky. Avšak v prípade, že modul potrebuje mať TinyMCE k dispozícii len za
určitých podmienok – napr. len keď je prihlásená osoba oprávnená editovať obsah –
16
tak môže túto premennú nastaviť na false a načítať i inicializovať si TinyMCE vo
vlastnej réžii až vtedy, keď je to opodstatnené.
•
$modconfig['guests'] – boolean premenná určujúca, či modul má byť dostupný aj pre
neprihlásených užívateľov. Ak užívateľ nemá právo na jeho zobrazenie, nielenže sa
mu nezobrazí, ale aj pri pokuse o vstup do neho priamym zápisom adresy do
prehliadača, bude užívateľ presmerovaný na hlavnú stránku portálu.
•
$modconfig['rights'] – Zoznam oprávnení, ktoré modul využíva. Jednotlivé
oprávnenia sú oddelené znakom | („pipe“) a každé oprávnenie má tri časti, oddelené
dvojbodkou. Prvá časť je názov oprávnenia v tvare modul_názov, druhá je jeho popis
v slovenskom jazyku a posledná časť je jeho popis v anglickom jazyku.
3.3.4 Činnosti jadra vykonávané pri každom načítavaní stránky
•
Odštartuje sa relácia, t.j. odošle sa cookie súbor relácie, a pošle sa hlavička
s informáciou o type obsahu a jeho kódovaní (text/html, UTF-8).
•
Spojenie s databázou - je nadviazané iba raz, a to na začiatku. Toto zabezpečuje súbor
init.db.php, ktorý obsahuje adresu hostiteľa a prihlasovacie údaje k databáze. Ak sa
nepodarí pripojenie k databáze, alebo vybratie databázy portálu, skript zlyhá s
príslušnou chybovou hláškou. Hneď po úspešnom spojení s databázou sa odošle prvý
dotaz: „SET NAMES ‚utf8‘“. To zaistí, že výsledky z databázového servera budú
v kódovaní UTF-8, a tiež to hovorí serveru, že dotazy budú v kódovaní UTF-8.
•
Zavedenie šablónovacieho systému Smarty, čo sa urobí zahrnutím jeho hlavnej triedy
(Smarty.class.php). Avšak potom ho treba ešte pripraviť, to znamená vytvoriť jeho
inštanciu a priradiť jej atribúty, podľa ktorých bude pracovať (vykonáva sa to v súbore
init.smarty.php). Tieto atribúty Smarty-mu hovoria, kde má hľadať šablóny, kam má
ukladať vyrovnávaciu pamäť šablón atď. Boli ponechané na pôvodných hodnotách,
pretože šablóny sa aj tak nenachádzajú v adresári Smarty-ho, ale tam, kam patria (k
jadru, do modulov). Kompiláty šablón a vyrovnávacia pamäť sa ukladajú do
predvolených Smarty-ho adresárov (cache a templates_c), ktoré na serveri musia mať
nastavené oprávnenia (chmod) na čítanie i zápis do nich.
•
Načítanie súboru s funkciami functions.php. Ich popis a účel využitia je uvedený
v kapitole 3.4.1.
•
Zo súboru mainconfig.php sa načíta zoznam všeobecných oprávnení do premennej
$mainconfig['rights']. Zoznam oprávnení v konfiguračných súboroch má vždy
rovnaký formát popísaný v kapitole 3.3.3.
•
Nastavenie predvolených hodnôt týkajúcich sa jazykov. Je predurčené, že prednosť
má jazyk nastavený užívateľom v jeho profile ($_SESSIO8['lang_override']), a až
potom sa berie do úvahy jazyk uvedený v adrese stránky v parametri lang
17
($_GET['lang']). Výsledný jazyk sa uloží do premennej $_SESSIO8['lang']. Na konci
sa zabezpečí, že pokiaľ bude jazyk nastavený na niečo iné, než reťazce sk alebo en,
predvolený jazyk je sk.
•
Načítanie jazykových reťazcov jadra, resp. všeobecných jazykových reťazcov.
Podrobnejšie informácie o jazykových lokalizáciách sú v kapitole 3.5.
•
Spracuje sa reťazec s právami jadra, predtým načítaný z jeho konfiguračného súboru.
Túto činnosť zabezpečí funkcia load_rights(). Výsledkom je spracovaný zoznam
oprávnení v superglobálnom poli $_SESSIO8.
•
Načíta sa z databázy konfiguračná premenná určujúca, či je portál dočasne mimo
prevádzky – premenná má názov locked_full a je uložená v tabuľke config. Ak je
nastavená na 1, vypíše sa len veta o dočasnom odstavení portálu, a že užívateľ má
opakovať pokus neskôr. Samozrejme, pre užívateľov s oprávnením s názvom
main_lockdownoverride odstavenie portálu neplatí a pokračuje sa ďalej, ako bežne.
•
Poskladá sa časť adresy s parametrom lang určujúcim jazykovú verziu stránky.
Výsledok sa uloží do premennej $linklang, ktorá sa používa v šablónach. Túto činnosť
treba urobiť preto, aby sa v prípade anglickej verzie stránky generovali aj odkazy na
správnu jazykovú verziu podstránok.
•
Načítajú sa konfiguračné súbory modulov typu content. Pre každý modul z nich sa
vykonávajú ďalšie činnosti, ak je modul aktívny a ak má užívateľ právo na jeho
zobrazenie. Spomínané činnosti sú zahrnutie do menu, určenie poradia modulu v menu
na základe premennej z jeho konfiguračného súboru (order) a priradenie názvu
modulu do menu (menuitem), spolu s jeho identifikátorom v adrese podstránky
(uriitem). Ak modul potrebuje priradiť nejaké premenné do Smarty-ho na zobrazenie v
šablóny, teraz sa uskutoční ich priradenie Smarty-ho metódou assign. Nakoniec sa
pole menu zoradí PHP funkciou sort, ktorá zoraďuje elementy v dvojrozmernom poli
na základe hodnôt prvého kľúča, v našom prípade order (poradie modulu v menu).
•
Kontrola, či modul typu content (podstránka) uvedený v parametri q adresy, vôbec
existuje, teda či existuje jeho hlavný súbor modindex.php. Ak modul existuje, načítajú
sa jeho jazykové reťazce z jeho jazykových súborov, načíta sa jeho konfiguračný
súbor a potom sa samotný modul spustí. Ak modul neexistuje, uvedené činnosti sa
vykonajú pre základný, predvolený modul home (hlavná stránka portálu).
•
Načítanie a spracovanie modulov typu left_column a right_column, ktoré sú v
konfiguračných súboroch povolené a užívateľ má právo na ich zobrazenie. Pritom sa
ešte načítajú jazykové reťazce z jazykových súborov týchto modulov.
•
Načítanie verzie – poslednej úpravy kódu – zo súboru version.txt.
•
Popriraďovanie Smarty-ho premenných jeho metódou assign. Tieto premenné sa
využívajú v šablónach, kde majú určené svoje miesto na výpis.
18
•
Volanie Smarty-ho metódy display – zobrazenie šablóny main.tpl s priradenými
premennými Smarty-ho.
3.3.5 Činnosť modulov
Pri spúšťaní modulov nastáva potreba modulu vypísať nejaký obsah. Modul si to
zabezpečí tak, že použije Smarty-ho metódu assign na priradenie premenných na výpis do
šablóny a na konci spúšťacieho súboru, ak sa jedná o modul typu content, určí meno šablóny
na zahrnutie do hlavnej šablóny priradením do premennej $includuj. Tá sa v jadre priradí
šablóne pomocou Smarty-ho metódy assign a v šablóne sa zahrnie ten súbor, ktorý modul
touto premennou určil. V prípade, že ide o modul typu column_left alebo column_right,
prebieha výpis z viacerých modulov zároveň, nie iba z jedného, ako to je pri moduloch typu
content. Preto bolo treba zaviesť na spracovanie súborov šablón týchto modulov polia, a to
$includuj_left a $includuj_right. Názvy súborov šablón sú do nich priraďované na konci
spúšťacích súborov modulov, čiže v poradí spracovania. V tomto poradí sú aj zahŕňané do
hlavnej šablóny.
V spúšťacích súboroch modulov väčšinou netreba spracovávať súbor pre prácu
s databázou init.db.php, ani Smarty-ho, ani functions.php či ďalšie, pretože spúšťacie súbory
modulov sú spracovávané jadrom, ktoré už potrebné súbory načítalo. Tieto súbory je nutné
spracovávať len pokiaľ sa očakáva priame volanie skriptu. Tak je to napríklad v module login,
kde spúšťací súbor nemusí byť len zahŕňaný jadrom, ale môže byť aj volaný priamo, metódou
POST pomocou asynchrónneho volania JavaScriptu (Ajax). Rovnako bývajú volané aj rôzne
skripty modulov na manipuláciu s obsahom, takže v nich tiež treba potrebné pomocné skripty
zahrnúť.
3.4
POPIS FU9KCIÍ
Univerzálne časti kódu, ktoré sa dajú využiť viackrát, je žiaduce vložiť do funkcií
a odkazovať už len na tieto funkcie. To šetrí úsilie pri editácii takéhoto kódu, pretože ho stačí
upravovať len na jednom mieste. Funkcie môžu, ale nemusia mať vstupné hodnoty, a taktiež
môžu, ale nemusia mať návratovú hodnotu. Závisí to od toho, na akú činnosť je funkcia
určená, a teda, či vstupné dáta a výstupnú hodnotu vôbec potrebuje.
3.4.1 PHP funkcie
PHP funkcie, ktoré sú využívané viackrát, či len majú potenciál byť takto v budúcnosti
využité, sú umiestnené v súbore functions.php. Kompletný výpis funkcií nachádzajúcich sa
v tomto súbore, spolu s popisom, na čo ktorá slúži, ponúka táto kapitola.
19
•
load_rights($odkial) – zoberie reťazec oprávnení, ktorý dostala v parametri, a vloží
tieto oprávnenia do superglobálneho poľa $_SESSIO8 tak, že ponastavuje ich
slovenský i anglický popis, ale hodnotu každého oprávnenia nastaví na false – t.j. že
aktuálne prihlásený užívateľ dané oprávnenie nemá. Táto funkcia sa používa na
načítanie všetkých oprávnení z konfiguračných súborov modulov i jadra.
•
load_rights2($odkial) – používa sa na nastavenie tých oprávnení na true, ktoré
užívateľovi patria. V parametri dostáva zoznam týchto oprávnení oddelený znakom |
(„pipe“). Používa sa pri prihlasovaní.
•
load_modules($dir) – funkcia určená na načítanie modulov typu, ktorý dostáva
v parametri, napr. „modules/content“. Pozrie sa do tohto adresára a pre každý
z modulov, ktorý obsahuje konfiguračný i spúšťací súbor, priradí premenné
z konfiguračného súboru do riadka dvojrozmerného poľa, obsahujúceho údaje
o všetkých moduloch. Toto pole modulov sa používa v jadre, ktoré údaje z neho ďalej
spracúva.
•
is_number($number) – vráti true, ak reťazec v parametri je číselný – obsahuje len
znaky 0 až 9. Jej použitie je v kontrole integrity dát, kde sa nemožno spoľahnúť na
údaje získané metódou GET či POST.
•
datum($vstup, $cas, $friendly) – ako prvý parameter (povinný) dostane dátum a čas
vo formáte unix timestamp-u, vráti reťazec vo forme čitateľnej pre človeka. Ak je
uvedený aj druhý parameter a je nastavený na false, k výslednému reťazcu sa nepridá
čas, bude to iba dátum. Tretí parameter je taktiež nepovinný a ak je nastavený na true,
výsledný reťazec bude užívateľsky prívetivejší tým, že bude obsahovať slová „Dnes“,
„Včera“, „Predvčerom“ pre príslušné dátumy.
•
jazyk($jazyk, $modpath, $l) – načíta jazykové reťazce do premennej $l (pole
jazykových reťazcov) patriace k tomu modulu, ku ktorému je uvedená cesta v druhom
parametri, ktorý ak je prázdny, načítajú sa jazykové reťazce jadra. Prvý parameter
udáva dvojpísmenový kód jazyka – buď „sk“ alebo „en“. Premenná $l je predávaná pri
volaní tejto funkcie odkazom, aby sa pôvodné pole jazykových reťazcov neprepísalo,
ale len sa nové reťazce pridali ku starším.
•
mytruncate($string, $limit, $break, $pad) – odsekne dlhý reťazec tak, aby
obsahoval najviac $limit znakov, na znaku $break, ktorý je zdola najbližšie k tomuto
limitu. K takto upravenému reťazcu na koniec pridá reťazec $pad. Z textu sa odstránia
(X)HTML tagy, okrem tagu <br />, ktorý ostane zachovaný. Táto funkcia sa používa
v module newest_notices, kde nastáva skrátený výpis troch najnovších oznamov.
•
filename($menosuboru) – vstupný reťazec tvorí meno súboru s príponou aj cestou
k nemu. Funkcia vráti meno súboru aj s príponou.
•
ext($cesta) – vstupný reťazec tvorí meno súboru s príponou a eventuálne aj cestou
k nemu. Funkcia vráti príponu súboru s bodkou na začiatku.
20
•
fname($cesta) – vstupný reťazec tvorí meno súboru s príponou aj cestou k nemu.
Funkcia vráti meno súboru bez prípony.
•
notintags_replace($co, $cim, $text) – zamení v reťazci $text všetky výskyty znaku
$co reťazcom $cim, ktoré sa nachádzajú mimo (X)HTML značiek.
•
diakritika_replace($str) – zamení vo vstupnom reťazci všetky výskyty (X)HTML
entít niektorých znakov s diakritikou za tieto znaky samotné. Je to kvôli úspore miesta
v databáze a prehľadnejšiemu ukladaniu takýchto reťazcov v nej. Tieto entity tam
vytvoril TinyMCE pri odosielaní obsahu spracujúcemu skriptu.
•
one_wordwrap($string, $width) – v reťazci $string všetky slová dlhšie ako $width
znakov rozdelí na slová kratšie ako táto dĺžka vložením medzery tam, kde treba.
Používa sa pri výpise obsahu, ako protiopatrenie voči záškodníkom, ktorí by chceli
pomocou extrémne dlhých slov deformovať rozloženie stránky.
•
vstup_do_db($str) – zabezpečí reťazec vstupujúci do databázy (tam je použitie tejto
funkcie) proti útoku SQL Injection tým, že zamieňa znaky apostrof a spätné lomítko
za ich ekvivalenty. Tiež zamieňa úvodzovky za ich entitu. Reťazce nepochádzajúce
z TinyMCE pred vstupom do databázy prejdú touto funkciou.
•
vstup_do_db_tinymce($text) – zabezpečí text pochádzajúci z TinyMCE pred
vstupom do databázy a ešte zaistí, že tento text bude XHTML platný. Použitá verzia
TinyMCE je pomerne staršieho dáta a má s XHTML platnosťou problém.
•
getidbyuser($username) – vráti ID užívateľa so zadaným nickom z databázy.
•
getuserbyid($id) – vráti nick užívateľa zo zadaným ID z databázy.
•
access($id, $tabulka) – vráti boolean hodnotu určujúcu, či práve prihlásený užívateľ
má právo na záznam so zadaným ID zo zadanej tabuľky databázy. Určuje sa to na
základe toho, či užívateľ je prihlásený a ak áno, či má účet aj v NMS. Tieto fakty sa
porovnávajú s hodnotami tohto záznamu v stĺpcoch acc_unreg, acc_regnorm
a acc_regnms v zvolenej tabuľke databázy.
•
access2($id, $modul) – to isté, ako funkcia access, ale tu sa berú dáta vždy z tabuľky
stlpce_data. Záznam je tam jednoznačne identifikovaný kombináciou uvedených
dvoch vstupných premenných.
•
redir($kam) – presmerovanie na modul s parametrom q adresy rovným $kam, pričom
k cieľovej adrese presmerovania je pridaný prípadný jazykový parameter lang.
•
searchstring($what) – používa sa pri vyhľadávaní záznamov v databáze. Aby
užívateľ mohol používať wildcardové znaky * a ? namiesto % a _, dochádza k zámene
týchto znakov tak, že je to umožnené. Okrem toho ešte nastáva zabezpečenie reťazca
proti útoku SQL Injection.
•
byteconvert($b) – prevedie číslo $b – počet bajtov – do užívateľsky prívetivej formy,
premenené na kB, MB, GB alebo TB podľa veľkosti. Používa sa na výpis veľkostí
súborov pri výpise výsledkov vyhľadávania súborov na internátnej sieti.
21
•
bytes($b, $units) – vynásobí veľkosť $b 1024 toľko krát, koľko je nutné pre jednotku
uvedenú v parametri $units.
•
round9umber($num) – zaokrúhli číslo na dve desatinné miesta
•
p_encrypt($text, $salt) – zašifruje text osolený hodnotou $salt. Funkcia je mierne
upravená, ale je prevzatá z diskusie k PHP modulu mcrypt na php.net.
•
p_decrypt($text,$salt) – rozšifruje text zašifrovaný funkciou p_encrypt.
3.4.2 Funkcie JavaScriptu
Funkcie JavaScriptu, ktoré sú v client-side skriptovaní využívané na viacerých
miestach, alebo je predpoklad, že môžu byť v budúcnosti takto využité, sa nachádzajú
v súbore scripts/script.js.php. Tieto funkcie môžu byť použité v každom z modulov. Ich
prehľad a vysvetlenie, na čo ktorá slúži, obsahuje táto kapitola.
•
getHTTPObject() – vráti objekt XMLHTTP Request, ktorý je základom fungovania
ajax-ových funkcií portálu. Funkcia sa postará o to, aby vrátila tento objekt čo možno
najnezávislejšie na prehliadači užívateľa.
•
str_replace(inputString, fromString, toString) – obdoba PHP funkcie str_replace().
V reťazci inputString zamení všetky výskyty reťazca fromString za reťazce toString.
•
getvar(name) – vráti hodnotu parametra nachádzajúceho sa v adrese – z „query
stringu“ aktuálne načítanej stránky.
•
urlencode(str) – zmení vstupný reťazec tak, aby bolo bezpečné prenášať ho cez
Ajax-ové POST požiadavky. Musia sa teda zameniť všetky znaky majúce špeciálny
význam, za ich ekvivalenty, ktoré tento význam nemajú.
•
htmlspecialchars_decode(str) – obdoba PHP funkcie htmlspecialchars_decode(),
zamení entity (X)HTML znakov za tieto znaky samotné. Používa sa v module msg pri
odpovedaní na prijatú správu, kde treba vyplniť textové pole s nickom adresáta, ktorý
je v (X)HTML atribúte id a teda nemôže obsahovať žiadne (X)HTML znaky.
•
getwidth(), getheight() – funkcie na zisťovanie výšky a šírky zobrazovacej časti
prehliadača v pixeloch. Bolo nutné to zisťovať cez tieto funkcie, lebo prehliadače sú
v uvádzaní týchto hodnôt veľmi nejednotné. Tieto funkcie sú používané pri vypisovaní
upozornení či chybových hlášok tak, aby boli presne na strede stránky.
•
myalert(nadpis,message) – zobrazenie chybovej alebo informačnej hlášky s textom
message. Typ hlášky určuje parameter nadpis, ktorý môže mať hodnoty error či info.
Podľa toho sa zobrazí príslušné „okienko“ s hláškou zo šablóny errors.tpl.
•
closealert() – slúži na zatvorenie chybovej či informačnej hlášky, zobrazenej funkciou
uvedenou vyššie. Táto činnosť zahŕňa vlastne len návrat zobrazenia stránky do
pôvodného stavu – ponastavovanie príslušných elementov tak, aby sa nezobrazili.
22
•
myconfirm(nadpis,message,onklik) – zobrazenie potvrdzovacej hlášky s textom
message. Parameter nadpis môže obsahovať len hodnotu confirm, ale počíta sa
s možným rozšírením do budúcnosti pre ďalšie prípady použitia tejto funkcie.
Parameter login obsahuje reťazec funkcie, ktorá sa má spustiť po kliknutí na tlačidlo
Áno či tlačidlo 8ie, vrátane jej parametrov. Táto funkcia by mala mať ešte jeden
parameter, v tomto reťazci zastúpený textom *potvrdil*, ktorý bude po kliknutí na
tlačidlo nahradený číselnou hodnotou 2 alebo 1, indikujúcou, či bolo kliknuté na
tlačidlo Áno (2) alebo 8ie (1). Na základe toho vie potom volaná funkcia rozlíšiť, akú
akciu treba vykonať.
•
closeconfirm() – zatvorenie potvrdzovacej hlášky. Funkcia i jej využitie sú veľmi
podobné funkcii closealert().
•
readCookie(name) – prečíta a vráti hodnotu cookie s názvom name. Použitie je vo
fóre, kde sa načítava užívateľom určené zoradenie príspevkov – od najnovšieho po
najstarší, alebo naopak. Podľa toho sa pri pridávaní príspevku určuje, kam sa nový
príspevok umiestni; či to bude na začiatok, alebo na koniec výpisu príspevkov.
•
setCookie(name,value,days) – nastaví cookie pomocou JavaScriptu. Táto funkcia sa
nevyužíva nikde, ale je medzi funkciami uvedená, lebo je predpoklad, že by bolo
vhodné ju mať v budúcnosti poruke.
•
eraseCookie(name) – zmaže cookie pomocou JavaScriptu. Momentálne sa nepoužíva
a je tu z toho istého dôvodu, ako funkcia setCookie().
•
isnumber(sText) – funkcia kontrolujúca, či je vstupný text číslo, podľa toho vráti true
alebo false. Používa sa pri kontrole hodnôt vo formulári, kde sa očakáva zadanie čisla.
•
GetLongXml9odeValue(co,zcoho) – Vráti z textu vo formáte XML (parameter
zcoho) hodnotu medzi tagmi s názvom co. Bolo nutné tieto hodnoty medzi tagmi
vyťahovať z XML dokumentu pomocou tejto funkcie, pretože natívne funkcie na
XML analýzu, ktoré obsahujú prehliadače, sú mnohokrát chybné (napríklad v čase
testovania prehliadač Mozilla Firefox nevedel spracovať text dlhší ako 4096 znakov).
Táto funkcia podobné obmedzenia prehliadačov eliminuje.
•
3.5
removeHTMLTags(strInputCode) – odstráni zo vstupného reťazca (X)HTML tagy.
JAZYKOVÁ LOKALIZÁCIA
V dnešnej dobe, pri rastúcej globalizácii internetových služieb, sa rôzne jazykové
varianty týchto služieb stávajú takpovediac nutnosťou. Aby bol obsah stránok dostupný
a zrozumiteľný aj pre neslovenských užívateľov, vývoj portálu prebiehal s dôrazom na
dvojjazyčnosť – v kombinácii slovenčina a angličtina – najmä ak je treba informovať
23
zahraničných študentov o dianí na internátoch atď. Užívateľ má dve možnosti, ako si vybrať
svoj jazyk, ktorý uprednostňuje:
•
Ak je užívateľ neprihlásený, môže si prepnúť jazyk kliknutím na príslušnú vlajku
v pravom hornom rohu stránky. Pri prepínaní na zobrazenie anglickej verzie stránky sa
k adrese pridá parameter lang s hodnotou en, pri prepínaní na slovenčinu sa tento
parameter celý odstráni, pretože slovenčina je predvolený jazyk, teda parameter by bol
zbytočný. I keď aj parameter lang s hodnotou sk by fungoval správne. Prepínanie
jazykov parametrom lang je vhodným univerzálnym spôsobom preto, aby bolo možné
posielať odkazy trebárs cez instant messenger programy alebo e-mail priamo na
príslušnú jazykovú verziu stránky.
•
Ak je užívateľ prihlásený, tak okrem hore uvedeného spôsobu môže využiť aj
nastavenie uprednostňovaného jazyka vo svojom profile. Tento jazyk bude potom
načítaný automaticky po prihlásení, čo zvyšuje pohodlie užívateľa a ušetrí mu jedno
kliknutie.
O načítavanie potrebných jazykových reťazcov sa stará jadro, ktoré na tento účel
používa funkciu jazyk() (jej podrobnejší popis je v kapitole 3.4.1). Vždy sú načítavané
z jazykových súborov jazykové reťazce len tých modulov (plus jadra), ktoré sú potrebné na
výpis stránky, ktorú užívateľ požaduje. Jazykové reťazce sa umiestňujú do globálneho
asociatívneho poľa $l, ktorého kľúče sú názvy (identifikátory) jazykových reťazcov v tvare
modul_názovreťazca, napr. forum_addtopic. Hodnotami sú samotné jazykové reťazce
požadovaného jazyka, čo umožňuje odkazovanie na príslušnú jazykovú verziu reťazca len
jedným, univerzálnym spôsobom, a to identifikátorom reťazca. Pole jazykových reťazcov $l
sa priradí šablóne pomocou Smarty-ho metódy assign, čo zaručí nahradenie všetkých
výskytov identifikátorov týchto reťazcov v šablóne za ich požadované jazykové varianty.
Jazykové reťazce sa nachádzajú v už spomínaných jazykových súboroch. V moduloch
majú názvy modlang.sk.lng a modlang.en.lng, jazykové súbory jadra majú názvy main.sk.lng
a main.en.lng. Súbory so sk v názve obsahujú slovenské jazykové reťazce, s en anglické.
Majú vždy rovnakú štruktúru: na každom riadku je jeden jazykový reťazec majúci tvar
identifikátor|reťazec. Prázdne riadky sa môžu vyskytovať kdekoľvek a sú pri spracovávaní
jazykových súborov ignorované.
Ak je treba vypísať nejaký jazykový reťazec v Javascriptovej funkcii, tento sa jej zadá
v niektorom z jej parametrov. Niekedy sa jedná o jazykové reťazce, ktoré majú byť vypísané
v chybovej alebo informačnej hláške (zo súboru errors.tpl). Tieto reťazce môžu byť zalomené
na ďalší riadok pomocou rezervovaného výrazu [8L] znamenajúceho „nový riadok“. Tento
zástupný výraz je nahradený v Javascriptovej funkcii, ktorá sa stará o výpis hlášok, za
konkrétny výraz nového riadku, a to je buď \n (pre IE vo výpise Javascriptovej funkcie
24
alert()), alebo <br /> (pre prehliadače, ktoré rozumejú CSS vlastnosti position: fixed, kde je
teda možné chybové či informačné hlášky rozumne zobraziť a vypisujú sa v XHTML).
3.6
OŠETRE9IE UŽÍVATEĽSKÝCH VSTUPOV A ZABEZPEČE9IE
Skoro nikdy nie je možné spracovávať užívateľský vstup tak, ako bol zadaný. Buď
treba vstup upraviť tak, aby mohol byť prenášaný, trebárs cez XML, resp. treba niektoré
znaky nahradiť za iné, ktoré nemajú špeciálny význam, či treba zabezpečiť, aby užívateľ
zadal to, čo sa od neho očakáva (trebárs číslo a nie reťazec tam, kde sa očakáva číslo). Takéto
ošetrenie užívateľských vstupov má veľký význam nielen v zabezpečení aplikácie, ale aj
v tom, že v prípade „exotickejšieho“, resp. neočakávaného vstupu, nenastane chyba a v rámci
možností bude požadovaná operácia pokračovať ďalej.
Textové vstupy, ktoré sa ukladajú do databázy, prejdú predtým najprv funkciami
vstup_do_db() alebo vstup_do_db_tinymce(), ktoré zaistia, že vstupný reťazec bude bezpečne
do databázy vložený. Zaistí sa to napr. nahrádzaním apostrofov a ďalších špeciálnych znakov
za ich ekvivalenty. V PHP existuje jedna konfiguračná direktíva s názvom „magic quotes“,
ktorá ak je zapnutá, spôsobuje automatické nahrádzanie úvodzoviek, apostrofov, lomítok
a NUL znakov. Pôvodne to malo ušetriť programátorom starosti s ošetrovaním užívateľských
vstupov, avšak v praxi skôr opak je pravdou. Nastavenie serverov je v tomto nejednotné, preto
pred úpravou reťazcov na vkladanie do databázy je treba vrátiť tieto reťazce do pôvodného
stavu, ak je direktíva „magic quotes“ zapnutá. Funkcia úprav pre textové vstupy pochádzajúce
z TinyMCE zabezpečuje ešte aj úpravu tohto vstupu tak, aby spĺňal štandard XHTML.
V oboch prípadoch sú úvodzovky zamenené za ich entity. V databáze sú textové vstupy
z TinyMCE ukladané vo forme XHTML kódu, pokiaľ možno platného, teda vrátane
špeciálnych znakov nahradených entitami. Obyčajné textové vstupy sú uložené v databáze
tak, že majú nahradené znaky „ampersand“ a „úvodzovky“ ich entitami. Ostré zátvorky sú
nahradené entitami pri výpise, čím sa zachová platnosť stránky vzhľadom na štandard
XHTML a predíde sa útokom typu XSS a ďalším. Veľmi dlhé slová sú rozdelené na kratšie,
aby ich výpisom nedochádzalo k zdeformovaniu stránky.
Kvôli zvýšeniu užívateľského pohodlia sú vstupy kontrolované už na strane klienta
JavaScriptom. Kontroluje sa, či polia, ktoré majú byť vyplnené, nie sú prázdne, či polia, kde
sa ako vstup očakáva číslo, neobsahujú nejaký nečíselný znak, či pole pre e-mailovú adresu
ozaj obsahuje reťazec e-mailovú adresu reprezentujúci, prípadne ďalšie záležitosti. Niekedy je
nutné odoslať údaje z formulára pomocou Ajax-ového volania a v prípade, že skript na serveri
vyhlásil chybu, urobiť patričné kroky (varovať užívateľa, aby chyby v zadaní vstupu odstránil
a pod.). Príkladom pre takéto správanie môže byť formulár pre registráciu. Keď sú všetky
údaje na prvý pohľad v poriadku, skontrolované JavaScriptom, pošlú sa na spracovanie na
25
server. Tam sa zistí, že napríklad užívateľ s takým istým nickom, aký sa pokúša ďalší užívateľ
zaregistrovať, už existuje, PHP skript vyhlási chybu a JavaScript sa postará o zobrazenie
chybovej hlášky o už zaregistrovanom nicku.
Samozrejme, že kontrola údajov iba na strane klienta nestačí. Funkcie JavaScriptu na
kontrolu sa dajú vypnúť rôznymi doplnkami pre Firefox, prípadne prehliadač nemusí
podporovať JavaScript. Aby túto ochranu nebolo možné obísť, kontroluje sa integrita dát aj
priamo na serveri, po ich obdržaní PHP skriptom. Ak nastane chyba, operácia sa ukončí ako
pokus o prienik. Na strane servera sa kontroluje aj, či vôbec má daný užívateľ na danú
operáciu oprávnenie. Napriek tomu, že ak oprávnenie nemá, nemohol uvidieť ani formulár na
odoslanie dát, ani JavaScriptovú funkciu, ktorá sa o ajax-ové volanie má postarať, je možné
ručne odoslať POST požiadavku skriptu, ktorý má dáta spracovať (aj keď sa prípadný útočník
musí najprv nejako názov tohto skriptu a cestu k nemu dozvedieť). Opäť, ak oprávnenie
nemá, nepokračuje sa ďalej. Pokračuje sa, až keď je jasné, že všetky dáta i oprávnenia sú
v poriadku. Toto všetko zaisťujú spracovateľské PHP skripty samostatne, využívajúc funkcie,
ktoré sú dostupné buď v PHP priamo, alebo zo súboru s funkciami functions.php.
JavaScriptové súbory modulov majú koncovku .js.php, aby bolo možné v nich
používať jazyk PHP, aj keď len v tej najnutnejšej miere. Dôvod je ten, že tieto JavaScriptové
súbory mnohokrát obsahujú funkcie na editáciu, vkladanie, odstraňovanie obsahu a ďalšie
manipulácie, na ktoré nemá oprávnenie každý užívateľ. Posielať všetkým užívateľom rovnakú
množinu JavaScriptových funkcií, aj keď nemajú potenciál byť použité, by bolo neefektívne,
ale hlavne by to bolo bezpečnostné riziko. Záškodnícky užívateľ by mohol študovať
JavaScriptové funkcie na manipuláciu s obsahom a zistil by, kde sa nachádzajú
spracovateľské skripty a aké dáta očakávajú. Aj keď kontrola dát nastáva, ako už bolo
spomenuté, i na serveri, omyl nie je vylúčený. Týmto postupom sa zvyšuje bezpečnosť
stránky.
3.7
I9TEGRÁCIA S 9MS
NMS (Network Management System) je systém na správu internátnej siete vytvorený
podľa potrieb Internet Klubu. Obsahuje okrem iného informácie o užívateľoch internátnej
siete, ich zariadeniach, kvótach na prenesené dáta, limitoch atď. Jednou z požiadaviek na
funkcie portálu, vyplývajúcou z potrieb Internet Klubu, bola integrácia s NMS, to znamená:
•
umožniť užívateľom z internátnej siete (tí majú účet v NMS) prihlásenie sa na portál
bez registrácie a s rovnakými prihlasovacími údajmi ako do NMS,
•
sprístupniť užívateľom internátnej siete dodatočný obsah, ktorý je pre ostatných
užívateľov nedostupný, či nezaujímavý (ďalšie návody, vyhľadávanie na DC...),
•
ak užívateľ má účet v NMS, zmena hesla v NMS sa prejaví aj na portáli a naopak.
26
Prepojenie s NMS zabezpečujú triedy zo súborov class.AAClient.php a
class.CryptedXMLRPCClient.php. Poskytol ich vedúci informačnej sekcie Internet Klubu
Richard Tóth, ktorý je zároveň autorom NMS. Po vytvorení inštancie triedy AAClient sú
dostupné jej metódy umožňujúce získavanie informácií z databázy NMS:
•
CheckCredentials($login, $password) – vráti ID užívateľa, alebo prázdny reťazec,
podľa toho, či sa užívateľ so zadanými prihlasovacími údajmi v NMS nachádza.
•
GetMetaOne($id, 'F9AME') – vráti reálne meno užívateľa so zadaným ID. Ďalšie
informácie o užívateľovi sa dajú získať zámenou druhého parametra:
'IKMAIL' – e-mailová adresa
'ICQ' – ICQ číslo
'MS9' – MSN kontakt
'JABBER' – Jabber kontakt
'PHO9E' – telefónne číslo
'MMSHP' – vráti pole reťazcov určujúcich, do ktorých užívateľských skupín v NMS
užívateľ patrí.
•
CheckLoginExistence($login) – vráti boolean hodnotu závisiacu od toho, či užívateľ
s daným prihlasovacím menom už v NMS existuje. Používa sa na kontrolu pri
registrácii, kde je registrácia rovnakým nickom, ako už existujú v NMS odmietnutá.
•
ChangePassword($login, $oldpassword, $newpassword) – metóda na zmenu hesla
v NMS. Používa sa pri zmene hesla na portáli, aby heslá v NMS a na portáli ostali
vždy rovnaké, Pre zmenu hesla je potrebné poznať aj staré heslo. Ak nesedí, metóda
vráti false.
Údaj o tom, či užívateľ má, alebo nemá účet v NMS, sa ukladá do relačnej premennej
$_SESSIO8[‘nms’]. Podľa nej moduly vedia, aký obsah majú aktuálne prihlásenému
užívateľovi sprístupniť. Táto premenná a sa nastavuje pri prihlasovaní a pri odhlásení sa
vymaže PHP funkciou unset().
3.8
RSS
RSS je XML formát používaný na publikáciu často aktualizovaných stránok, ktorého
účelom je to, že aby užívateľ nemusel navštevovať webstránku, namiesto toho si zadá do RSS
čítačky adresu RSS súboru tejto stránky. Čítačka periodicky kontroluje, či sa niečo v tomto
RSS súbore zmenilo. Ak áno, nové údaje stiahne a upozorní užívateľa. Ako RSS čítačka sa
dajú použiť niektoré prehliadače, či e-mailoví klienti (napr. Mozilla Thunderbird).
S rastúcim množstvom obsahu na portáli nastala potreba riešiť generovanie RSS
kanálov. Tie, logicky, nie sú dostupné pre každú časť stránky, keďže nie každý modul (typu
content) musí RSS podporovať. Ako je spomenuté v kapitole 3.3.2, to, či modul RSS
27
podporuje, je dané existenciou súboru modrss.php v adresári tohto modulu. Ak modul RSS
podporuje, do hlavnej šablóny sa pridá odkaz naň, v tvare napríklad:
<link rel="alternate" type="application/rss+xml" href="http://iklub.sk/
rss.php?q=forum&amp;lang=en" title="RSS" />
Tento riadok spôsobí v prehliadači zobrazenie ikonky RSS, cez ktorú je možné pristupovať
k RSS kanálu pre daný modul. Horeuvedený príklad je odkaz na RSS kanál pre anglickú
verziu modulu forum.
Generovanie RSS kanálov zabezpečuje vždy súbor rss.php v koreňovom adresári
portálu. Podľa parametra q v jeho adrese zistí, o RSS kanál ktorého modulu má užívateľ
záujem a tento kanál vygeneruje. Kód toto zabezpečujúci je v mnohom podobný kódu jadra,
starajúci sa o spracovanie modulov. Prezrú sa všetky moduly typu content, pospracúvajú sa
ich konfiguračné súbory, a do výsledného dvojrozmerného poľa s údajmi o moduloch sa
zaradia len tie moduly, ktoré sú povolené a užívateľ má dostatočné oprávnenia na ich obsah.
Ak modul zadaný v parametri q neexistuje v tomto poli, spracúva sa modul home (hlavná
stránka). Ak je všetko v poriadku, spracuje sa súbor modrss.php príslušného modulu, ktorý
načíta potrebné údaje na vygenerovanie RSS kanála do poľa $rss. Toto pole sa priradí do
šablóny pomocou Smarty-ho metódy assign a vypíše sa šablóna rss.tpl. Ten obsahuje už
predpripravenú XML štruktúru RSS kanála. Potrebné premenné sú vypísané na svoje miesta
tam, kam treba. Každá položka RSS kanála má nasledujúcu štruktúru (položky sú vypisované
z pripraveného poľa $rss v cykle):
<item>
<title>{$item.title}</title>
<link>{$item.link}</link>
<guid>{$item.guid}</guid>
<description>{$item.description}</description>
<pubDate>{$item.pubdate}</pubDate>
<dc:subject>{$item.subject}</dc:subject>
</item>
Vysvetlenie k hlavnej štruktúre RSS súboru:
•
title – nadpis položky
•
link – odkaz na webstránku, kde je položka zobrazená
•
guid – jednoznačný identifikátor položky v rámci RSS kanála. Na základe guid
čítačky určujú, či sa jedná o novú položku, alebo či už predtým bola stiahnutá,
prečítaná atď.
•
description – popis položky, ale môže to byť aj priamo jej obsah, ako napríklad
príspevok fóra.
28
•
pubDate – dátum a čas vytvorenia položky.vo formáte GMT. Nie každá položka RSS
kanála ho musí obsahovať. Napríklad v module odkazy sa dátum ani neukladá.
•
dc:subject – to isté, ako nadpis položky
Každý takto vygenerovaný RSS kanál je v kódovaní UTF-8, o čom je čítačka
informovaná nielen hlavičkou samotného RSS kanála, ale aj HTTP hlavičkou, ktorá okrem
kódovania uvádza aj typ obsahu tohto kanála:
Content-Type: application/rss+xml; charset: utf-8
29
4
ADMI9ISTRAČ9É FU9KCIE
Administrácia portálu je dostupná len prihláseným užívateľom, ktorí majú naviac
oprávnenie na vstup do administrácie, zvané main_admin. Administrácia obsahuje viac
možností, ktoré rozoberá táto kapitola.
4.1
VŠEOBEC9É 9ASTAVE9IA PORTÁLU
•
Dočasné vyradenie portálu z prevádzky – nastaví konfiguračnú premennú locked_full
v tabuľke config databázy na hodnotu 1. Ak je toto nastavené, vypíše sa namiesto
načítania stránky len krátke oznámenie o dočasnom odstavení portálu. Prihlásení
užívatelia, ktorí majú špeciálne oprávnenie zvané main_lockdownoverride, stále môžu
portál používať aj napriek tomu, že je odstavený.
4.2
•
Dočasné pozastavenie registrácie – nastaví konfiguračnú premennú locked_reg
v tabuľke config databázy na hodnotu 1. To spôsobí, že nebude možné umožnená
registrácia novým užívateľom. Namiesto registračného formulára sa zobrazí len krátke
oznámenie informujúce o tomto fakte.
•
Východzie práva nových užívateľov – obsahuje skupinu zaškrtávacích políčok, každé
reprezentuje jedno oprávnenie. Sú tu všetky oprávnenia pre celý portál, ktoré možno
užívateľom prideľovať. Oprávnenia, pri ktorých sú políčka zaškrtnuté, sú nastavené
v tabuľke config databázy v riadku default_rights ako klasický zoznam oprávnení
s položkami oddelenými znakom | („pipe“). Táto množina oprávnení je prideľovaná
novým užívateľom, ktorí sa buď registrujú cez registračný formulár, alebo sa len
prihlásia s tým, že na portáli ešte prihlásení neboli, ale majú účet v NMS.
SPRÁVA UŽÍVATEĽOV A ICH OPRÁV9E9Í
V tejto časti administrácie je možné spravovať údaje o užívateľoch. Tiež poskytuje
informácie, ktoré sú o užívateľovi uložené v jeho zázname v databáze.
Výber užívateľa, ktorého údaje si želáme zobraziť, je možné realizovať cez roletové
menu, ktoré obsahuje abecedne zoradený zoznam všetkých užívateľov, alebo je možné zadať
nick užívateľa ručne a dať ho vyhľadať. Pri vyhľadávaní je povolené použitie zástupných
znakov „hviezdička“ a „otáznik“. Do výsledkov vyhľadávania sú zaradené aj čiastočné zhody.
Dá sa tu vykonať zmena užívateľského mena, e-mailovej adresy, reálneho mena
a hesla. Zmena hesla nastane len na portáli, v NMS sa neprejaví, pretože na to by bolo treba
poznať pôvodné heslo užívateľa. Je možné tu aj nastaviť pre konkrétneho užívateľa špeciálnu
30
farbu nicku, akou sa bude zobrazovať na portáli. Vyberá sa z farebnej palety, predvolená
farba je zelená. Ak je užívateľ nastavený ako neaktívny, nebude mu umožnené prihlásiť sa
(má ban). Voľba „adresár pre upload“ je určená pre potreby zásuvného modulu TinyMCE na
spravovanie súborov na serveri. Má zmysel ju meniť len, ak užívateľ má právo na túto
činnosť (názov tohto oprávnenia je main_upfiles. Pod hlavným formulárom sa nachádza
veľký počet zaškrtávacích políčok, slúžiacich na správu oprávnení vybraného užívateľa.
Obr. 4-7: Formulár pre administráciu užívateľov
Údaje zvoleného užívateľa sa načítajú hneď po jeho výbere zo zoznamu, čo je zaistené
Ajax-ovým volaním. Ukladanie údajov je tiež riešené Ajax-ovo, čiže bez nutnosti
znovunačítania stránky, ako aj vyhľadávanie podľa nicku užívateľa. Požadované výsledky sú
zo servera vracané ako XML súbor, ktorý sa na strane klienta analyzuje a s údajmi z neho sa
vykonajú príslušné operácie.
31
4.3
HROMAD9É I9FORMOVA9IE UŽÍVATEĽOV
Pre potreby hromadného informovania užívateľov tak, aby si čo najviac užívateľov
danú informáciu prečítalo, je možné v administrácii odoslať hromadnú súkromnú správu
alebo hromadný e-mail.
4.3.1 Zaslanie hromadnej súkromnej správy
Formulár pre zaslanie hromadnej súkromnej správy obsahuje okno TinyMCE pre
plnohodnotnú editáciu obsahu a extra textové pole pre vpísanie subjektu hromadnej
súkromnej správy. Po odoslaní tohto formulára bude do tabuľky msg v databáze vložených
toľko záznamov, koľko je registrovaných užívateľov. Naviac budú odoslané notifikačné emaily aj s obsahom súkromnej správy tým užívateľom, ktorí majú v profile nastavené, že si
tieto e-maily želajú odoberať (táto voľba je v profiloch užívateľov nastavená aj predvolene).
Okrem samotnej správy budú odoslané e-maily obsahovať hlavičku a pätu, ktoré sú
definované v štyroch súboroch admin.mail.*.tpl, rozlíšené podľa jazyka, ktorý má príjemca
súkromnej správy nastavený ako uprednostňovaný vo svojom profile.
4.3.2 Zaslanie hromadného e-mailu
Okrem polí, ktoré obsahuje formulár pre zaslanie hromadnej súkromnej správy,
formulár pre zaslanie hromadného e-mailu obsahuje navyše textové pole pre vpísanie emailovej adresy odosielateľa hromadného e-mailu. Predvolená hodnota tohto poľa je
[email protected]. Odosielanie formulára je opäť riešené Ajax-ovo a to tak, že po stlačení tlačidla
Odoslať sa bude počet odoslaných e-mailov zobrazovať v popise tohto tlačidla. Je to tak
preto, že odosielanie môže trvať dlhšie, pričom administrátor si to nemusí uvedomiť.
E-maily sú odosielané klasickou PHP funkciou mail(). Subjekt e-mailu je odosielaný
v kódovaní UTF-8 kombinovaným s base64_encode(), aby fungovala diakritika aj v subjekte
e-mailu. K samotnému e-mailu sú pridané extra hlavičky:
From: <odosielateľ>
Content-Type: text/html; charset="utf-8"
X-Portal-Username: <prihlasovacie meno odosielateľa hromadného e-mailu>
Hlavička Content-Type informuje e-mailového klienta o tom, že e-mail je v kódovaní
UTF-8 a že jeho obsahom je HTML kód. To zaistí, že obsah e-mailu sa zobrazí v e-mailovom
klientovi presne tak, ako to určil odosielateľ v editore TinyMCE pri odosielaní hromadného emailu. Užívateľské meno odosielateľa na portáli je uvedené v hlavičkách z bezpečnostných
dôvodov, keby sa niekto rozhodol odosielať takto spam.
32
5
5.1
POPIS FU9KCIÍ 9IEKTORÝCH MODULOV
A9KETY
Ankety na webovej stránke sú základnou a najjednoduchšou formou vyjadrenia
názorov užívateľov. Ľudia radi hlasujú v anketách, pretože im na to stačia dve kliknutia.
Obr. 5-8: Ukážka z administrácie ankiet
Systém ankiet pozostáva z dvoch modulov. Anketa samotná je modul s názvom green
a je typu right_column. Administrácia ankiet je modul typu content s názvom poll_admin. Na
obrázku 5-9 je ukážka jednej časti administrácie ankiet. Vľavo sa nachádza náhľad ankety – je
to ukážka, ako bude anketa vyzerať. Takto vyzerá anketa po tom, čo v nej už užívateľ
hlasoval, či nemá oprávnenie hlasovať (alebo je len neprihlásený). Anketa, v ktorej je možné
ešte hlasovať, obsahuje namiesto odrážok pri odpovediach preklikávacie tlačítka a naspodku
sa nachádza tlačidlo Hlasovať.
V pravom stĺpci stránky v module green sa zobrazí vždy len jedna anketa – tá, ktorá je
nastavená ako aktívna. Ak nie je nastavená žiadna aktívna anketa, zobrazí sa namiesto nej len
krátka informácia o tomto fakte. Hlasovanie v ankete prebieha Ajax-ovo, čiže bez
znovunačítania stránky. V administrácii sú načítané údaje o ankete ihneď po jej výbere zo
zoznamu ankiet. Každá anketa musí obsahovať aspoň dve odpovede, maximálny počet
odpovedí nie je obmedzený. Odoberať a pridávať odpovede je možné tlačidlami „plus“
a mínus“. V databáze sú údaje ankiet uložené do dvoch tabuliek: ankety a ankety_odpovede.
33
5.2
I9TEGROVA9Ý E-MAILOVÝ KLIE9T
Integrácia e-mailového klienta do portálu sa javila ako vhodné riešenie, aby sa
užívatelia nemuseli prihlasovať do portálu a potom sa prihlasovať do e-mailového klienta
znova. Bolo zvolené už hotové riešenie webového e-mailového klienta – s názvom
RoundCube, čo je moderný, rýchly a flexibilný klient. Ukážka, ako vyzerá, sa nachádza
v prílohe č. 4.
Odkaz na webmail vedie z hlavnej stránky, ako posledná položka v menu. Je to modul
typu content, ktorý odkazuje na inú stránku, názov modulu je rcmail. Odkaz vedie na skript
rcmail/autologin.php. Tento skript má za úlohu prihlásiť užívateľa do webmailu pomocou
prihlasovacích údajov, ktoré si užívateľ uložil v profile. Ak je užívateľ neprihlásený, či si
neuložil do profilu prihlasovacie údaje do webmailu, alebo sú tieto údaje neplatné, je
zobrazený klasický prihlasovací formulár webmailu. Autentifikácia prebieha priamo voči
IMAP serveru. Prihlasovacie údaje do webmailu sú ukladané v databáze šifrovane. O prácu
s týmito šifrovanými reťazcami sa starajú PHP funkcie p_encrypt() a p_decrypt().
Po inštalácii klienta RoundCube na server bolo nutné upraviť jeho vzhľad tak, aby sa
podobal na internátny portál. To bolo docielené skopírovaním predvoleného vzhľadu (s
názvom default) a vytvorením nového s názvom iklub, ktorý bol potom nastavený ako
predvolený. Vďaka skinovateľnosti klienta toto bolo otázkou úpravy CSS a HTML súborov.
K tomu bolo treba ešte prispôsobiť súbory s grafikou – napr. pozadia a logo webmailu.
Vzhľady e-mailového klienta sú uložené v adresári rcmail/skins.
Tiež bolo treba dopísať niektoré jazykové reťazce do súborov s lokalizáciou, keďže
tam pre slovenčinu niektoré tieto reťazce chýbali. Jazykové súbory RoundCube sú umiestnené
v adresári rcmail/program/localization.
5.3
VYHĽADÁVA9IE 9A I9TER9ÁT9OM DC HUBE
DirectConnect (DC) je do značnej miery decentralizovaná výmenná sieť určená na
zdieľanie a sťahovanie dát. Jej centrálnymi jednotkami sú tzv. huby. Sú to servery, na ktoré sa
pripájajú užívatelia. V rámci jedného hubu môžu užívatelia diskutovať (na verejnom chate, či
na súkromnom), sťahovať jeden od druhého súbory a vyhľadávať súbory u užívateľov
pripojených na ten istý hub. Najväčšie svetové huby navštevuje okolo desať tisíc užívateľov.
Na pripojenie k hubu je nutné mať DC klienta – program, ktorý spomenuté činnosti zvláda.
Funkcia vyhľadávania na internátnom DC hube je takým príjemným doplnkom pre
užívateľov internátnej siete. Internátny DC hub beží na adrese dc.twingy.sk:411 a nie je
dostupný zvonka internátnej siete. Ak sa užívateľ z internátnej siete (teda s účtom v NMS,
resp. so špeciálnym oprávnením search_dcftp) nachádza mimo internátu a chce si vyhľadať
34
na internátnom DC hube študijné materiály, táto funkcia mu to umožní. Tiež príde vhod, ak
užívateľ nemá práve DC klienta a nechce sa mu ho kvôli nejakej maličkosti (o ktorej ani
nevie, či sa na sieti nachádza) inštalovať a nastavovať.
Obr. 5-9: Formulár vyhľadávania na internátnom DC hube
Formulár vyhľadávania na internátnom DC hube (obr. 5-10) pripomína rovnaký
formulár priamo z DC klienta. Do poľa pre hľadaný výraz sa zadáva, čo sa má vyhľadať. Typ
súboru dáva na výber z možností: všetky, audio, video, obrázky, spustiteľné, dokumenty,
komprimované a adresáre. O vracanie výsledkov podľa typu sa stará už samotný DC protokol,
pričom sa filtruje podľa prípony súborov. Pole Veľkosť súboru dáva možnosť obmedziť
veľkosť súborov, ktoré budú vrátené vo výsledkoch a to zhora, zdola, na presný počet bytov,
alebo vôbec. Zaškrtávacie políčko v dolnej časti formulára zaistí, že budú vrátené výsledky
len od užívateľov, ktorí majú voľné sloty na upload – teda dá sa od nich sťahovať.
Po odoslaní formulára sa na strane klienta odpočítava dvadsať sekúnd. Počas tohto
času beží na serveri PHP skript, ktorý sa pripojí na hub pod vlastným nickom, odošle
požiadavku na vyhľadávanie a čaká na výsledky. Prijaté výsledky ukladá do databázy,
konkrétne do tabuľky dcsearch. Keď uplynie dvadsať sekúnd, skript na strane servera sa
ukončí, a v prehliadači sa vyvolá znovunačítanie stránky, teda aj zobrazenie výsledkov.
Výsledky určené danému užívateľovi, sa v databáze odlíšia podľa stĺpca session, ktorý
obsahuje identifikátor PHP relácie.
Vnútorne funguje vyhľadávanie (podľa DC protokolu) – veľmi stručne – takto:
•
klient sa pripojí na server – hub – TCP spojením. Predvolený port hubu je 411.
•
prebehne handshake – výmena prihlasovacích informácií medzi hubom a klientom.
Hub vyšle požiadavku $Lock, na ktorú klient musí odoslať príslušný $Key a nick, pod
ktorým si želá na hube vystupovať, požiadavkou $Validate8ick. Každá požiadavka
DC protokolu je oddelená znakom | („pipe“).
•
Ak na hube už nie je voľné miesto, alebo presmerováva užívateľov na iný hub, alebo
je požadovaný nick obsadený, hub informuje klienta o tomto fakte požiadavkami
$ForceMove či $ValidateDenide. Ak je nick chránený heslom, hub pošle $GetPass, na
čo klient musí odpovedať požiadavkou $MyPass nasledovanou heslom
v jednoduchom texte.
35
•
Keď všetko prebehlo v poriadku, hub privíta užívateľa požiadavkou $Hello
nasledovanou jeho nickom, ktorú pošle aj ostatným užívateľom na hub pripojeným,
aby vedeli, že na hub prišiel nový užívateľ.
•
Novo pripojený užívateľ môže začať vyhľadávať. Odošle požiadavku na vyhľadávanie
hubu $Search, ktorý ju rozošle všetkým ostatným, na hub pripojeným užívateľom.
•
Klient čaká na výsledky vyhľadávania tak, že načúva na zvolenom UDP porte, číslo
ktorého odoslal spolu s požiadavkou na hľadanie. Ak sa u niektorého z pripojených
užívateľov nájde súbor či adresár vyhovujúci zadaným podmienkam, na spomínanom
UDP porte hľadajúci klient obdrží výsledky ($SR) priamo od klienta, ktorý hľadanými
súbormi či adresármi disponuje.
•
Ukončenie spojenia s hubom, odoslaním požiadavky $Quit hubu. Ten prepošle túto
požiadavku aj s nickom odchádzajúceho užívateľa ostatným užívateľom pripojeným
na hub.
Konkrétne a podrobné vysvetlenie fungovania vyhľadávania na internátnom DC hube
(zvlášť popis požiadaviek DC protokolu) presahuje rozsah tejto dokumentácie k bakalárskej
práci. Na portáli sa o operácie súvisiace s vyhľadávaním na DC hube stará súbor
dcsearch.php z modulu search (typu content), ktorý je, ako už bolo spomenuté, spúšťaný
Ajax-ovým volaním.
36
6
OVERE9IE RIEŠE9IA
Z užívateľského pohľadu je možné overiť riešenie priamo na internetovej adrese
internátneho portálu: http://iklub.sk. Aby bolo možné overiť riešenie z administrátorského
i programátorského hľadiska, zdrojové kódy sú uložené na priloženom CD v adresári www.
Pre odskúšanie portálu na vlastnom stroji je treba vykonať nasledujúce operácie (postup bol
testovaný na Kubuntu 8.10 Intrepid Ibex s predvolenou inštaláciou apache2, mysql a php5):
•
skopírovať obsah adresára www z CD do adresára určeného pre webové stránky web
servera (typicky /var/www)
•
pripraviť obsah MySQL databázy importovaním zo súboru db.sql z priloženého CD
•
v súbore init.db.php nastaviť prístupové údaje k databáze MySQL
•
ak sa súbory portálu nenachádzajú v koreňovom adresári webového servera, treba
nastaviť obsah premennej $site_root na začiatku súboru index.php
•
nastaviť oprávnenia – chmod – všetkých súborov a adresárov (vrátane koreňového
adresára portálu) tak, aby webový server ich mohol čítať, zapisovať do nich i spúšťať
ich. Na testovacie účely je vhodné nastaviť chmod 0777.
•
nainštalovať balíky php-pear a php5-curl (kvôli umožneniu inštalácie XML_RPC2)
•
do PEARu doinštalovať XML_RPC2 príkazom pear install XML_RPC2 (je
vyžadovaný kvôli integrácii s NMS)
•
v súbore scripts/tiny_mce/plugins/iwimg/conf.inc.php
$config['image_url'] a $config['image_path']
•
v súbore
nastaviť
premenné
scripts/tiny_mce/plugins/filemanager/InsertFile/config.inc.php
nastaviť
premenné
$MY_DOCUME8T_ROOT,
$MY_URL_TO_OPE8_FILE
treba
$MY_BASE_URL
a
•
v súbore rcmail/config/db.inc.php treba nastaviť prístupové údaje k databáze, ktoré
budú využívané e-mailovým klientom
•
v súbore modules/content/rcmail/modconfig.php zmeniť konfiguračnú premennú tohto
modulu $modconfig['uriitem'] tak, aby smerovala na umiestnenie e-mailového klienta
v tejto konkrétnej inštalácii portálu.
Ak je všetko v poriadku, portál by mal fungovať. Je možné, že ešte bude treba nastaviť
konfiguráciu PHP v súbore php.ini, avšak to závisí od použitej inštalácie PHP. Keďže portál
je v značnom rozsahu šitý na použitie na internátnej sieti, tak ak je server mimo internátnej
siete, nebudú fungovať tieto funkcie:
•
vyhľadávanie na internátnom DC hube (je zvonka siete nedostupný)
•
indexovanie obsahu internátnych FTP serverov (sú zvonka chránené firewallom)
•
zobrazovanie aktuálnej teploty na Veľkom Dieli (tiež zvonka nedostupné)
37
•
integrácia s NMS (NMS vracia HTTP kód 401 Unauthorized) – pretože volanie
funkcií NMS je povolené len z IP adresy 158.193.86.1 – nebude fungovať ani na
internátnej sieti. V priložených zdrojových kódoch sú na nutných miestach volania
funkcií NMS vypoznámkované (priradenia premennej $UID).
V databáze sú vopred založené dva užívateľské účty, autentifikácia pomocou ktorých
bude fungovať vždy, teda aj bez účasti NMS. Administrátorský účet má prihlasovacie meno
admin a heslo admin. Užívateľský účet má prihlasovacie meno user a heslo user.
38
7
ZÁVER
Cieľom tejto bakalárskej práce bolo vyvinúť a implementovať internátny portál
slúžiaci študentom Žilinskej univerzity, Internet Klubu, či ubytovacím a stravovacím
zariadeniam Žilinskej univerzity.
Internátny portál umožňuje správu veľkej časti obsahu dynamicky, bez nutnosti
znalosti programovacích jazykov – je to taký menší CMS na mieru ušitý pre Internet Klub.
Užívatelia môžu vyjadriť svoj názor prostredníctvom fóra či ankiet. Administrácia užívateľov
a podrobná správa ich oprávnení umožňuje určovať jednotlivým užívateľom špeciálne
oprávnenia vyplývajúce z ich poslania na portáli, napr. moderovanie fóra. Malým bonusom
pre užívateľov internátnej siete (teda majúcich účet v NMS) je vyhľadávanie na internátnom
DC hube a dostupnosť dodatočného obsahu, ktorý sa bežným užívateľom nesprístupní.
Do budúcnosti je v pláne umožnenie administrácie užívateľov pomocou užívateľských
skupín, ktoré budú preberané z NMS. Malo by to zjednodušiť administráciu užívateľov.
Ďalším nápadom do budúcnosti je prerábka jazykovej lokalizácie tak, aby bolo možné
jednoduchšie pridávať ďalšie jazyky. Nateraz postačujú dve jazykové verzie: slovenská
a anglická.
Dnes internátny portál funguje v ostrej prevádzke na adrese http://iklub.sk (resp.
http://dorm.uniza.sk) a teší sa veľkému počtu užívateľov, ktorí ho denne používajú. Obsahuje
mnoho ďalších modulov a funkcií, ktorých vysvetlenie fungovania by prekročilo rozsah tejto
dokumentácie k bakalárskej práci.
39
8
8.1
ZOZ9AMY
ZOZ9AM POUŽITÝCH SKRATIEK
CD
DC
ID
IE
IK
IP
JS
ŽU
CMS
CSS
DNS
FRI
FTP
NMS
PHP
RSS
SQL
TCP
TTH
UDP
XML
XSS
AJAX
HTTP
IMAP
UTF-8
(X)HTML
WYSIWYG
- Compact Disk
- DirectConnect
- identifikátor
- Internet Explorer
- Internet Klub
- Internet Protocol
- JavaScript
- Žilinská univerzita
- Content Management System
- Cascaded Style Sheets
- Domain Name Service
- Fakulta riadenia a informatiky
- File Transfer Protocol
- Network Management System
- Personal Home Page (alebo PHP Hypertext Preprocessor)
- Rich Site Summary
- Structured Query Language
- Transmission Control Protocol
- Tiger Tree Hash
- User Datagram Protocol
- eXtensible Markup Language
- Cross-site scripting
- Asynchrónny JavaScript a XML
- Hypertext Transfer Protocol
- Internet Message Access Protocol
- UCS/Unicode Transformation Format
- (eXtensible) Hypertext Markup Language
- What You See Is What You Get
40
8.2
ZOZ9AM POUŽITÝCH ZDROJOV
[1]
MySQL Reference Manual: http://dev.mysql.com/doc/refman/5.1/en
[2]
PHP Manual: http://sk.php.net/manual/en
[3]
Wikipedia: http://sk.wikipedia.org
[4]
HITTMÁR, Š. 2007. Metodická pomôcka pre spracovateľov záverečných prác
bakalárskeho štúdia - bakalárskych prác. Žilina: 2007.
8.3
ZOZ9AM PRÍLOH
Príloha č. 1:
Príloha č. 2:
Príloha č. 3:
Príloha č. 4:
Príloha č. 5:
Príloha č. 6:
Logický model databázy
Fyzický model databázy
Ukážka hlavnej stránky portálu
Ukážka e-mailového klienta
Popis štruktúry tabuliek v databáze
CD so zdrojovými kódmi, modelmi databázy a jej exportom
41
Obr. 9-1: Logický model databázy
9
PRÍLOHY
Príloha č. 1
42
43
Príloha č. 2
Obr. 9-2: Fyzický model databázy
Príloha č. 3
Obr. 9-3: Ukážka hlavnej stránky portálu
44
45
Príloha č. 4
Obr. 9-4: Ukážka e-mailového klienta
Príloha č. 5
Tabuľka
Stĺpec
Použitie
primárny kľúč; je cudzím kľúčom v mnohých
uziv
id
ďalších tabuľkách tam, kde treba ukladať informáciu
o autorovi údajov či úprav.
login
pass
prihlasovacie meno užívateľa
heslo užívateľa uložené ako jeho dvojnásobný md5
hash, teda má vždy presne 32 znakov
e-mailová adresa užívateľa. Ukladá sa kvôli možnej
potrebe
kontaktovať
užívateľa,
príp.
rozoslať
hromadný e-mail, na notifikáciu o prichádzajúcej
mail
novej súkromnej správe na portáli, a tiež na kontrolu
pri registrácii, či už nie je zaregistrovaný užívateľ
s takou istou e-mailovou adresou. Ak užívateľ má
účet v NMS, prevezme sa jeho e-mailová adresa
automaticky odtiaľ
IP adresa, ktorú užívateľ mal pri vkladaní jeho
regip
údajov do tejto tabuľky; a to buď pri registrácii,
alebo pri prvom prihlásení, ak už užívateľ mal účet
v NMS
lastip
regdate
lastseen
IP adresa užívateľa pri jeho poslednom prihlásení
dátum a čas registrácie, resp. prvého prihlásenia (ak
užívateľ už mal účet v NMS)
dátum a čas posledného prihlásenia
dátum a čas posledného načítania stránky. Používa sa
lastrefresh
vo fóre na zvýraznenie nových príspevkov od
poslednej návštevy
osobné číslo užívateľa. Táto hodnota je vždy null,
pretože osobné
osobné
sa
nezaznamenáva.
číslo sačíslo
nezaznamenáva.
V pôvodnom
oscislo
V pôvodnom
sa mali
užívatelia
návrhu
sa malinávrhu
užívatelia
registrovať
podľaregistrovať
osobného
podľaa osobného
čísla
a čísla
karty, čím
by sa
čísla
čísla čipovej
karty,
čímčipovej
by sa predišlo
viacná46
sobným registráciám, no neskôr bolo rozhodnuté, že
klasická registrácia postačí. Tento stĺpec je tu
ponechaný pre prípadné použitie v budúcnosti a kód
využívajúci ho je vypoznámkovaný
oprávnenia užívateľa pre rôzne operácie na portáli.
Ak nemá žiadne práva, tento záznam obsahuje
prava
prázdny reťazec. Jednotlivé oprávnenia sa udávajú
ako
reťazce
v tvare
„modul_oprávnenie“
a sú
oddelené znakom | („pipe“)
udáva, či je užívateľ aktívny. Táto hodnota sa
active
kontroluje aj medzi načítaniami stránok, preto je
možné odňať zlomyseľnému užívateľovi prístup „za
behu“. Predvolená hodnota je 1
ak si užívateľ praje dostávať notifikačný e-mail pri
notify
príchode súkromnej správy, táto hodnota obsahuje 1,
inak 0. Predvolená je 1
dvojznakový kód jazyka užívateľa, na ktorý sa
lang
stránka prepne po prihlásení. Predvolená je hodnota
„sk“
cesta pre zásuvný modul TinyMCE na nahrávanie
súborov, kam bude užívateľ môcť nahrávať súbory,
vytvárať podadresáre a pod. Táto cesta je relatívna
k adresáru /download. Ak je táto hodnota null,
fileup_path
užívateľ môže manipulovať so súbormi v adresári
/download a všetkých jeho podadresároch. Táto
hodnota má zmysel len, ak má užívateľ pridelené
oprávnenie na odosielanie súborov cez TinyMCE
s názvom main_upfiles
rname
reálne meno a priezvisko užívateľa
udáva preferenciu užívateľa, či sa jeho reálne meno
udáva
má zobraziť aj ostatným užívateľom. Predvolená
má
rname_show
hodnota je 0, dá sa nastaviť v užívateľskom profile.
hodnota
Ak jejetotomožné,
možné,reálne
reálne
meno
sa prevezme
z NMS.
Ak
meno
sa prevezme
z NMS.
47
Užívatelia, ktorí majú oprávnenie zobrazovať reálne
mená všetkých užívateľov, aj napriek tomu, že
užívateľ si zvolil svoje reálne meno nezverejniť, toto
jeho meno vidia
farba
color
nicku.
Takto
je
možné
odlíšiť
napr.
administrátorov od obyčajných užívateľov, príp.
prideliť špeciálnu farbu ľuďom zo študentských
organizácií
rcmail_login
rcmail_pass
msg
id
xfrom
xto
webmailu
šifrované heslo pre automatické prihlásenie do
webmailu
primárny kľúč
ID užívateľa, ktorý správu odoslal (cudzí kľúč
z tabuľky uziv)
ID užívateľa, ktorému je správa určená (cudzí kľúč
z tabuľky uziv)
subject
subjekt správy
text
text správy
datum
dátum odoslania správy
readmark
oznamy
užívateľské meno pre automatické prihlásenie do
udáva, či adresát správu už prečítal. Predvolená
hodnota je 0
id
primárny kľúč
nadpis
nadpis oznamu (veľký)
podnadpis
podnadpis oznamu (malý)
text
text oznamu
datum
dátum odoslania oznamu
autor
ID autora oznamu (cudzí kľúč z tabuľky uziv)
modul, do ktorého oznam patrí. Podľa modulu sa
modul
určuje, akou farbou sa vypíše nadpis oznamu. Ak je
null, patrí na len titulnú stránku (a predvolená farba
nadpisu oznamu je čierna)
48
ak oznam nepatrí len na titulnú stránku, táto hodnota
viewtitle
udáva, či oznam ostane len vo svojom module, alebo
sa zobrazí aj na titulnej stránke. Predvolená hodnota
je 1
odkazy
id
primárny kľúč
nadpis
nadpis odkazu
popis
popis odkazu
nadpis_en
nadpis odkazu po anglicky
popis_en
popis odkazu po anglicky
linka
odkaz samotný
poradie
autor
acc_unreg,
acc_regnorm,
acc_regnms
image_folders
images
odkaz vyššie
ID autora odkazu (cudzí kľúč z tabuľky uziv)
určenie, či sa má odkaz zobraziť neregistrovaným
užívateľom,
registrovaným
a registrovaným
s účtom
bez
účtu
v NMS.
primárny kľúč
caption
názov virtuálneho adresára s obrázkami
id
primárny kľúč
filename
alttext
folder
id
session
cas
v NMS
Predvolené
hodnoty sú 1
id
caption
dcsearch
poradie odkazu vo výpise. Čím nižšie číslo, tým je
pôvodný názov obrázku, ktorý bol odoslaný na
server
názov obrázku na serveri, pod ktorým ho TinyMCE
uložil
alternatívny text, ktorý sa po vložení obrázku do
textu vloží do jeho XHTML atribútu alt
ID virtuálneho adresára, do ktorého obrázok patrí
(cudzí kľúč z tabuľky image_folders)
primárny kľúč
PHP
identifikátor
relácie,
určujúce
toho,
kto
vyhľadával; má vždy dĺžku presne 32 znakov
dátum a čas zápisu výsledku, pre informatívne účely
49
file
nick
result
názov súboru či adresára
nick užívateľa na DC hube, u ktorého sa daný súbor
či adresár našiel
celý výsledok, čiže názov súboru/adresára aj s cestou
k nemu
veľkosť nájdeného súboru uložená v užívateľsky
size
prívetivej forme (premenená na B, kB, MB, GB).
V prípade adresára je táto hodnota null
slots
tth
ip
config
počet voľných slotov/počet všetkých slotov užívateľa
na DC
TTH (kontrolný súčet) súboru. Ak sa jedná o adresár,
hodnota je null
IP adresa užívateľa na DC spolu s portom, odkiaľ
prišli výsledky vyhľadávania
id
primárny kľúč
var
názov konfiguračnej premennej
value
hodnota konfiguračnej premennej
určuje,
typ
ako
sa
má
premenná
interpretovať
v administrácii – napr. ako zaškrtávacie políčko
(checkbox), či skupina checkboxov
stlpce
stlpce_data
popis
popis konfiguračnej premennej
popis_en
popis konfiguračnej premennej v angličtine
id, modul
kompozitný primárny kľúč. Atribút modul určuje, do
ktorého modulu patrí podstránka, odkaz, či súbor
nazov
nadpis stĺpca
nazov_en
nadpis stĺpca v anglickom jazyku
id
primárny kľúč
kompozitný cudzí kľúč z tabuľky stlpce. Udáva, do
ktorého modulu a do ktorého stĺpca v rámci tohto
kampatri, modul
modulu záznam patrí. Ak je kampatri rovné null,
jedná sa o nezávislú podstránku (to znamená, že
odkaz na ňu sa nevypíše v stĺpcovom menu).
50
poradie
poradie pri výpise, záznamy s nižším číslom poradia
sú vo výpise vyššie.
nadpis
nadpis sekcie
nadpis_en
nadpis sekcie v anglickom jazyku
obsahuje text sekcie, ak sa jedná o textovú sekciu
text
(typ 1), názov súboru v adresári download ak sa
jedná o súbor (typ 2), alebo odkaz na externú stránku
(typ 3)
text_en
typ
autor
variant hodnoty text pre anglickú verziu stránky
typ sekcie: text (hodnota 1), súbor (hodnota 2), alebo
odkaz na externú stránku (hodnota 3)
ID autora sekcie, cudzí kľúč z tabuľky uziv
určenie, či sa má sekcia zobraziť neregistrovaným
acc_unreg,
užívateľom,
registrovaným
bez
účtu
v NMS
acc_regnorm,
a registrovaným s účtom v NMS. Toto platí aj na
acc_regnms
vstup do sekcie, ak je to textová sekcia. Predvolené
hodnoty pre všetky polia sú 1
ftp_servers
id
adresa
port
login
adresa FTP servera buď ako IP adresa, alebo DNS
názov; bez portu
port, na ktorom beží FTP server
prihlasovacie meno, predvolené je „anonymous“ pre
anonymný prístup na server
pass
heslo; ak je anonymný prístup, heslo je null
datum
dátum a čas poslednej indexácie FTP servera
popis
stručný popis (trebárs nick majiteľa servera)
autor
ftp_files
primárny kľúč
id
server
nazov
ID užívateľa, ktorý server pridal do zoznamu, cudzí
kľúč z tabuľky uziv
primárny kľúč
cudzí kľúč z tabuľky ftp_servers, určuje, na ktorom
serveri sa súbor v čase indexovania nachádzal
názov súboru,
súboru,či adresára,
či adresára,
s kompletnou
s kompletnou
cestou.cestou.
Adresáre sa končia lomítkom
51
velkost
forum_prispevky id
veľkosť súboru v bajtoch. Adresáre majú veľkosť 0
primárny kľúč
autor
ID autora príspevku, cudzí kľúč z tabuľky uziv
text
text príspevku
ip
IP adresa, z ktorej bol príspevok odoslaný
datum
dátum a čas, kedy bol príspevok odoslaný
kampatri
ID témy, do ktorej príspevok patrí (cudzí kľúč
z tabuľky forum_temy)
dátum a čas poslednej editácie príspevku. Ak
lastedit_datum
príspevok nebol nikdy editovaný, obsahuje hodnotu
null
ID užívateľa, ktorý naposledy editoval príspevok
lastedit_meno
(cudzí kľúč z tabuľky uziv). Ak príspevok nebol
nikdy editovaný, táto hodnota je null
forum_temy
id
primárny kľúč
nadpis
nadpis témy
kategoria
sticky
ID kategórie, do ktorej téma patrí (cudzí kľúč
z tabuľky forum_kategorie)
údaj o tom, či je téma tzv. statická. Statické témy sú
vo výpise tém vždy navrchu. Predvolená hodnota je 0
údaj o tom, či je téma zamknutá. Do zamknutých tém
locked
sa nedá prispievať ani upravovať príspevky, ak na to
užívateľ nemá špeciálne oprávnenie. Predvolená
hodnota je 0
forum_kategorie
id
primárny kľúč
nazov
názov kategórie
popis
popis kategórie
poradie
poradie kategórie vo výpise. Kategórie s nižším
poradovým číslom sú vypísané prv
acc_unreg,
určenie, či sa má kategória zobraziť neregistrovaným
acc_regnorm,
užívateľom,
acc_regnms
a registrovaným s účtom v NMS. Toto sa kontroluje
52
registrovaným
bez
účtu
v NMS
aj pri zobrazení výpisu tém v kategórii, aj pri výpise
príspevkov nejakej témy z kategórie. Predvolené
hodnoty pre všetky polia sú 1
newsflash
id
primárny kľúč
nadpis
text nadpisu (veľký)
text
text novinky (malý)
nadpis_en
text nadpisu (veľký) pre anglickú verziu stránky
text_en
text novinky (malý) pre anglickú verziu stránky
číslo určujúce, komu sa má daná novinka zobraziť (0
typ
= len neprihláseným, 1 = len prihláseným, 2 =
všetkým, 3 = nikomu)
ankety
autor
ID užívateľa, ktorý novinku pridal (cudzí kľúč: uziv)
id
primárny kľúč
otazka
otázka ankety
otazka_en
otázka ankety v anglickom jazyku
autor
datum
ID užívateľa, ktorý anketu vytvoril (cudzí kľúč
z tabuľky uziv)
dátum a čas vytvorenia ankety
určuje, či je anketa aktívna, to znamená, že práve ona
active
bude zobrazená na stránke a bude sa v nej dať
hlasovať. Aktívna môže byť vždy maximálne jedna
anketa (to je zaistené na aplikačnej úrovni)
ankety_odpovede id
anketa
primárny kľúč
ID ankety, ku ktorej odpoveď patrí (cudzí kľúč
z tabuľky ankety)
odpoved
text odpovede
odpoved_en
text odpovede v anglickom jazyku
pocet
počet hlasujúcich za danú odpoveď v ankete
reťazec obsahujúci ID čísla užívateľov, ktorí za danú
hlasovali
odpoveď hlasovali, oddelené znakom | („pipe“). Ak
ešte za odpoveď nikto nehlasoval, táto hodnota
obsahuje prázdny reťazec
53

Similar documents

HERE - EURid

HERE - EURid Revoked .eu domain names – Zheng case meeusmakelaars.eu meineschufa.eu menteroda.eu mercuryeng.eu merkur-spielo.eu mi-5.eu michaniki.eu micropel.eu middelbos.eu millemedia.eu mimesweeper.eu mindco...

More information