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&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 ik@iklub.sk. 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
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