Zasnova spletnega orodja za prijavo na govorilne ure v sistemu Plone

Similar documents
Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js)

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig

Sistemske zahteve za SAOP

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije

Q: Do You made a backup before upgrade? A: Only cowards make backups!

sodobne poslovnoinformacijske rešitve Birokrat Kratka navodila za namestitev demo verzije programa Birokrat

DB2 podatkovna baza v praksi

Hitra rast hranjenih podatkov

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov

Navodila za uporabo izdelkov programske opreme Microsoft

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA DIPLOMSKO DELO GREGOR IVANŠEK

Prirejanje in preverjanje tipov

Uvod v svetovni splet

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK

Open IT VARNO POVEZOVANJE SODOBNIH ODPRTIH SPLETNIH APLIKACIJ V OBLAKU TYPO3, MAGENTO, ALFRESCO

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode

Navodila za nastavitev varne povezave po protokolu SSH

Šolski center Novo mesto Srednja elektro šola in tehniška gimnazija Šegova ulica 112, 8000 Novo mesto. Maturitetna seminarska naloga

Twitter Bootstrap in razvoj spletnega repozitorija za Cacti

Navodila za interaktivne naloge Bober

APLIKACIJE ZA SOCIALNA

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x

Sistem za dinamično upravljanje izgleda klienta IPTV

Učinkovita rešitev za izdelavo zaščitnih kopij z deduplikacijo in replikacijo

Specification and Implementation of a Light-Weight Internet Content Delivery Platform

Navodila za namestitev CREO 3.0 in Audax nastavitev

Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev

Transakcije v MariaDB/MySQL (transakcija A)

Razvoj poslovne spletne skupnosti z orodjem Drupal

Primož Hadalin IZDELAVA SPLETNEGA PORTALA POSLOVNE APLIKACIJE Z UPOŠTEVANJEM RAZLIK MED SPLETNIMI BRSKALNIKI

Kosovnica. Marko Obid. Kosovnica. Marko Obid

Spletni urejevalnik JSON datotek s podano vsebinsko shemo

Spletna aplikacija za urejanje vadbenih programov v fitnesu

Strukturirani poizvedovalni jezik SQL

Postavitev in upravljanje zasebnega oblaka z uporabo Microsoft System Center 2012 R2 in Windows Azure Pack za ponudnike storitev

Prometno načrtovanje xdsl

Naslavljanje v IP. Miran Meža

Razvoj aplikacij na platformi Google App Engine

Razvoj jezika za iskanje, povezovanje in predstavitev podatkov

Analiza in primerjava spletnih sistemov za upravljanje z vsebinami

RAZVOJ ENOSTAVNE SPLETNE APLIKACIJE Z UPORABO FLEKSIBILNEGA OGRODJA NA ODPRTOKODNIH KNJIŢNICAH

Izdelava aplikacij s podporo delovnih tokov za okolje SharePoint Server

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje.

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike

Razvoj spletne trgovine z vključitvijo naprednih storitev

Selitev aplikacije iz Oracle Forms v Oracle ADF (Application migration from Oracle Forms to Oracle ADF)

SPLETNA REŠITEV ZA POTREBE DRUŠTVA UPOKOJENCEV

Povezava DEQ v omrežje

SPLETNE SESTAVLJANKE IN POSLOVNI PORTALI

RAZVOJ ENOSTRANSKIH SPLETNIH APLIKACIJ S PORTALNO PLATFORMO LIFERAY

Lokacijske storitve na mobilnih napravah

Razširitve CMS z lastnimi moduli

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Dean Črnigoj. Izdelava odjemalca NFS za Windows DIPLOMSKO DELO

Oddaljen dostop do namiznega računalnika

Primerjava spletnih brskalnikov

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

Razvoj spletne aplikacije za urejanje datotek JSON z ogrodjem Django

Metodologija migracije iz Exchange v Office 365

Spletno luščenje podatkov z uporabo Pythona in knjižnice BeautifulSoup

Razvoj napredne spletne trgovine z upoštevanjem zgodovine nakupov

POSTAVITEV SPLETNEGA SISTEMA ZA PRIKAZ NAČRTA PROIZVODNJE

Ogrodje za razvoj mikrostoritev v Javi in njihovo skaliranje v oblaku

Povezava regulatorja DEQ v omrežje

Session:E07 GALIO - DB2 index advisor, how we implemented it and what we get from self-made expert tool

IZDELAVA SPLETNIH STRANI SIMON HORVAT ANITA URAN

Primerjava orodij za razvoj mobilnih aplikacij

Program za avtomatsko preverjanje algoritmov napisanih v programskem jeziku C++

NAMESTITEV WINDOWS 7 OKOLJA Z UPORABO MICROSOFT WAIK ORODIJ

IZDELAVA PROGRAMSKEGA PAKETA ZA GRAFIČNI PRIKAZ POMENSKIH SLOVARJEV IN ONTOLOGIJ

New Media & Language Technologies Jozef Stefan International Postgraduate School January Speech apps. Jerneja Žganec Gros

UPORABA SILVERLIGHT 4 ZA PODPORO PRI ELEKTRONSKEM PREVERJANJU ZNANJA

Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL

PRISOTNOST PRI POUKU S POMOČJO RFID

Primerjava izvornega in hibridnega razvoja mobilne aplikacije

Univerza v Mariboru Fakulteta za organizacijske vede. Programska rešitev za grafično prikazovanje najema in rezervacij vozil

Jure Cerjak. Razvoj spletnih aplikacij s platformo Zope

Aplikacija za prikaz prostorskih podatkov

D I P L O M S K A N A L O G A

3. sklop Elektronski obrazci OM1 ITK 2010/2011

Prenos interaktivnih spletnih vsebin s Flasha na HTML5

Pavle Gartner. Primerjava različnih rešitev za izvedbo spletne trgovine

Spletni iskalnik Google in optimizacija spletnih strani

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA

Luka Žabkar. Razvoj sodobne storitvene spletne strani za sledenje dieti in aktivnostim

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO

SPLETNA APLIKACIJA ZA SPREMLJANJE PODATKOV O FILMIH

BLUETOOTH KOMUNIKATOR ZA WINDOWS MOBILE 6.5

E R S Š G L J U B L J A N A Š O L S K O L E T O

Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar

Imenski prostori, poti in kazalci v XML

Časovno omejevanje dostopa do interneta

Transcription:

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA Žiga Štamcar Zasnova spletnega orodja za prijavo na govorilne ure v sistemu Plone Diplomsko delo Ljubljana, 2016

UNIVERZA V LJUBLJANI Pedagoška fakulteta Univerzitetni študijski program 1. stopnje Dvopredmetni učitelj - matematika in računalništvo Avtor: Žiga Štamcar Mentor: dr. Jože Rugelj, izr. prof. Somentor: as. Matej Zapušek Zasnova spletnega orodja za prijavo na govorilne ure v sistemu Plone Diplomsko delo Ljubljana, 2016

Povzetek Ideja za to diplomsko delo izhaja iz elektronskega sporočila, ki sem ga prejel od OŠ Trebnje, v katerem so izrazili potrebo po sistemu za prijavo staršev na govorilne ure. Povedali so, da so starši v času govorilnih ur včasih zbegani, saj pred vrati nekaterih učiteljev stoji veliko staršev in tako med njimi nastaja zmeda in nepotrpežljivost. Predlagal sem spletno orodje, izdelano v sistemu za upravljanje vsebine, preko katerega bi se starši in skrbniki prijavljali na proste termine govorilnih ur. Tako bi vsi uporabniki lahko preko interneta izbrali prost termin in si na ta način prihranili čakanje v vrstah in zmedo, ki pri tem nastaja. Zasnova takega orodja se mi je zdela zanimiv izziv in hkrati dovolj zanimiva ter obvladljiva tema za strniti v to diplomsko delo. Orodje sem se odločil zasnovati v sistemu za upravljanje vsebine Plone. Bralca tega diplomskega dela bom zato najprej seznanil s sistemi za upravljanje vsebine na splošno, potem bom predstavil ključne sestavne dele sistema Plone in jih nato prikazal na konkretnem primeru zasnove spletnega orodja za prijavo na govorilne ure. Pri predstavitvi orodja bom opisal vse njegove funkcionalnosti, ki bi zadoščale za najbolj osnovno verzijo takega orodja in jih podkrepil z zaslonskimi slikami ter delčki kode. Ključne besede: sistemi za upravljanje vsebin, Plone, spletno orodje, govorilne ure

Abstract Idea for this diploma thesis came from an e-mail I got from Trebnje primary school. In the e-mail they expressed the need for a parent-teacher conferences managing system. In their current system, parents have to wait in line, until a certain teacher would be available to speak with them. That would sometimes cause confusion and impatience between parents. For a solution to this problem, I designed a web tool, in which parents can make a reservation for a specific time period with one or many teachers. This decreases long waiting times and confusion associated with it. Designing such a tool seemed like it would provide many challenges and the underlying topic was interesting and manageable enough to present in this thesis. I decided to design this project using Plone content management system. First I will present some general information on content management systems, then I will describe Plone and its key components which I will later use in a concrete example of designing a basic web tool for signing up to a parent-teacher conference. In this example I will describe the functionalities of such a tool and will provide screenshots and code snippets. Key words: content management systems, Plone, web tool, parent-teacher conference

Kazalo vsebine Uvod... 1 1. Osnove sistemov za upravljanje vsebin... 3 1.1. Definicija... 3 1.2. Primeri CMS-jev... 3 1.2.1. WordPress... 4 1.2.2. Joomla!... 4 1.2.3. Drupal... 5 1.3. Zakaj odločitev za CMS?... 7 2. Predstavitev sistema Plone... 8 2.1. Splošno... 8 2.2. Kratka zgodovina... 9 2.3. Namestitev sistema Plone... 10 2.4. Uporabniški vmesnik... 10 2.4.1. Administratorski vmesnik (Nastavitve spletišča)... 12 2.4.2. Zope Management Interface ZMI... 14 2.5. Predloge (Templates)... 15 2.5.1. TAL, TALES in METAL... 15 2.5.2. Diazo... 17 2.5.3. CSS in JS... 18 2.6. Content Types... 18 2.7. Varnost... 19 2.7.1. Restricted/Unrestricted Python... 20 2.7.2. Varnostne kopije (Backups)... 21 2.7.3. Zope Object Database (ZODB)... 21 3. Govorilne ure... 24 3.1. Predstavitev delov izdelave orodja... 24 3.1.1. Content types... 24 3.1.2. Uporabnik... 26 3.1.3. Učitelj... 30 3.1.4. Skrbnik... 32 4. Zaključek... 33 5. Viri in literatura... 34

Kazalo slik Slika 1 - najbolj uporabljeni CMS-ji, julij 2016... 3 Slika 3 - WordPress administratorski vmesnik... 4 Slika 5 - Joomla administratorski vmesnik... 5 Slika 7 - Drupal administratorski vmesnik... 6 Slika 8 - število fakultet, ki poučujejo enega izmed sedmih izbranih programskih jezikov... 8 Slika 9 - Plone logo... 9 Slika 10 - uspešno nameščen Plone... 10 Slika 11 - pozdravna stran sistema Plone... 11 Slika 12 - orodna vrstica... 12 Slika 13 - nastavitev spletišča... 13 Slika 14 - pogled na ZMI... 14 Slika 15 - možni pogledi tipa vsebine "Mapa" v ZMI... 14 Slika 16 - možni pogledi tipa vsebine "Mapa" v Plonovem vmesiku... 15 Slika 17 - urejevalnik Diazo predlog... 18 Slika 18 - primer tipa vsebine "File"... 19 Slika 19 pogled na "Vzdrževanje" v nastavitvah spletišča... 21 Slika 20 - trenutno najbolj popularne podatkovne baze... 22 Slika 21 - polja (lastnosti) podatkovnega tipa "gu"... 24 Slika 22 - tip "gu" v ZMI... 25 Slika 23 - Python skripta tipa vsebine "gu"... 26 Slika 24 - filtriranje po imenih in priimkih... 27 Slika 25 - filtriranje po predmetih... 27 Slika 26 - razpisane govorilne ure za izbranega učitelja... 28 Slika 27 - prijava in odjava iz govorilne ure... 29 Slika 28 - odjava od termina TTW Python skripta... 30 Slika 29 - dodajanje nove govorilne ure preko orodne vrstice... 31 Slika 30 - trenutni pregled prijav na govorilno uro... 32

Uvod»So, the need for content management didn t begin with the World Wide Web, but simply shifted into fast forward when the web was born in the the early 90s. At that moment, the ability to create and publish content tumbled down from its ivory tower and into the hands of the masses. Almost anyone could create a web page about virtually anything.«(barker, 2015, str. 5) V današnjem času je močno prisotna potreba po sistemih, ki tudi računalniško manj podkovanim uporabnikom nudijo možnost dinamičnega upravljanja spletnih vsebin. Obiskovalci spletnih strani pričakujejo ažurne podatke, upravljalci spletnih vsebin pa želijo v kratkem času in s čim manjšimi zahtevami po specifičnih znanjih nuditi kvalitetno uporabniško izkušnjo, saj je»web presence«1 postal pomemben faktor pri uspešnosti podjetja, šole, glasbene skupine, gledališča, (Palan, b.d) Sistemi za upravljanje vsebin (Content Management Systems CMS) so sistemi, ki poenostavijo postavitev in vzdrževanje spletne strani. Vsebino tako zasnovane spletne strani je mogoče enostavno spreminjati preko intuitivnega grafičnega vmesnika, kar pomeni, da uporabnik za to ne potrebuje praktično nobenega računalniškega predznanja. Zaradi tega so zanimivi tudi za šolsko okolje, saj lahko poleg izdelave predstavitvenih strani in blogov - za kar se največ uporabljajo - preko njih implementiramo rešitve, ki omogočajo avtomatizacijo postopkov v učnem procesu oz. administraciji, ki jih lahko brez težav oz. dodatnega izobraževanja uporabljajo učenci, učitelji in starši. V diplomskem delu bom predstavil sistem za upravljanje vsebine Plone CMS, ki se od drugih bolj pogosto uporabljenih CMS-jev (Wordpress, Joomla, Drupal) razlikuje v načinu dela s sistemom, poudarku na varnosti, naboru podprtih tehnologij, fleksibilnosti in kompleksnosti. (Comparing Open Source CMSs: WordPress, Joomla, Drupal, and Plone, 2009) Značilnosti sistema Plone bom ponazoril na primeru zasnove spletnega orodja za prijavo staršev na govorilne ure. Za ta primer sem se odločil, ker se mi zdi dovolj obvladljiv za povzeti v diplomsko delo in hkrati dovolj kompleksen, da se preko njega predstavi sistem Plone in njegove funkcionalnosti. Ključni koncepti teh funkcionalnosti pa se lahko iz mojega primera prenesejo na mnogo različnih situacij, problemov. Prav tako se mi zdi primer prijave staršev na govorilne ure ustrezen zaradi izboljšav, ki bi jih lahko doprinesel na področju organizacije, evidentiranja in vodenja dokumentacije. Za več informacij o samem procesu prijave na govorilne ure in potrebah konkretne šole po takem orodju bom sodeloval z Osnovno šolo Trebnje. 1 Nisem našel dobrega slovenskega prevoda. S tem je mišljena podoba, ki si jo preko spletne strani (in drugih spletnih vsebin) ustvari podjetje, šola, gledališče, 1

2

1. Osnove sistemov za upravljanje vsebin 1.1. Definicija Na spletu lahko zasledimo več različnih definicij sistema za upravljanje vsebin, med katerimi so relativno majhne razlike, vendar v tem diplomskem delu se bom skliceval na spodnjo: Sistemi za upravljanje vsebine so spletne aplikacije, ki uporabnikom z različnimi pravicami omogočajo urejanje vsebine spletnih strani, brez potrebnega znanja HTML jezika. (Kohan, 2010) Dodal bi le, da sistemi za upravljanje vsebin olajšajo delo tudi razvijalcem spletnih strani, saj je veliko različnih funkcionalnosti (urejevalniki besedila, integracija s socialnimi omrežji, avtomatska izdelava varnostnih kopij, ) že vgrajenih v sam CMS. To pomeni, da jih uporabniku ni potrebno pisati od začetka, ampak si jih lahko samo prilagodi po svoje. CMS-ji so grajeni modularno, zato jih je možno dopolniti in prilagoditi uporabnikovim željam. Na spletu lahko najdemo ogromno dodatkov (angl. add-ons), ki jih lahko vključimo v izbran CMS. Seveda nam ti sistemi omogočajo tudi pisanje lastnih dodatkov, predlog, stilov, s katerimi lahko popolnoma prilagodimo bodisi izgled bodisi funkcionalnost spletne strani. Za take prilagoditve pa je potrebno znanje različnih programskih jezikov, kot so HTML, CSS, JS, PHP, Python, 1.2. Primeri CMS-jev Odločil sem se, da bom v tem razdelku omenil tri CMS-je, ki se trenutno (3. julij 2016) največ uporabljajo. Podatke sem pridobil iz spletne strani podjetja W3techs, ki že več let nadzoruje uporabo različnih spletnih tehnologij. Podatki na njihovi spletni strani se osvežujejo dnevno. Po njihovih raziskavah 55,6% spletnih strani, ki jih beležijo, ne uporablja nobenega sistema za upravljanje vsebine. Npr. WordPress uporablja 26,4% spletnih strani, kar predstavlja 59,5% delež vseh spletnih strani, ki uporabljajo katerega od CMS-jev. (Usage of content management systems for websites, 2016) Več o pridobivanju podatkov za to raziskavo, si lahko preberete na spletni strani https://w3techs.com/technologies. Slika 1 - najbolj uporabljeni CMS-ji, julij 2016 3

1.2.1. WordPress Prvo različico WordPressa so izdali maja 2003. Zasnovan je bil kot platforma za pisanje blogov, ki se je dodala obstoječim spletnim stranem. S časom je pridobival na priljubljenosti in razvijalci so dodajali vse več funkcionalnosti, ki so bolj značilne za CMS-je. WordPress ima dva nivoja vmesnikov: predstavitveni nivo oz.»front end«in administratorski nivo oz.»back end«. Osnovno obnašanje spletne strani, osnovane na WordPressu, lahko razširimo z vtičniki (angl. plugins) in temami. Z vtičniki lahko dodajamo funkcionalnosti trenutno je na uradni spletni strani (https://wordpress.org/plugins) na voljo 45506 vtičnikov, s temami pa prilagajamo izgled spletne strani. (Yoko, 2016) Slika 2 - WordPress administratorski vmesnik 1.2.2. Joomla! Sistem Joomla! je nastal avgusta 2015. Sprva se je projekt imenoval Mambo, kasneje pa je razvojni kader zaradi nesoglasja zapustil projekt Mambo in začel razvijati Joomlo. Končni produkt (Joomla 1.0.0) pa je bil le predelan in preimenovan Mambo CMS. (Joomla, 2015) Za razliko od WordPressa ima Joomla! tri nivoje vmesnikov. Poleg predstavitvenega in administratorskega nivoja ponuja še dodaten nivo, ki izgleda podobno kot predstavitveni, le da ima ta še možnost urejanja vsebine. To pomeni, da ni potrebe po dodajanju vsebine iz administratorskega vmesnika, to pa je po mojem mnenju za večino uporabnikov bolj intuitivno. Osnovno delovanje Joomle lahko razširimo z različnimi komponentami, moduli in vtičniki. Teh razširitev je na uradni spletni strani (http://extensions.joomla.org) trenutno na voljo 7907, seveda pa je neuradnih vtičnikov še mnogo več. Vizualen izgled lahko prilagajamo s predlogami. (Yoko, 2016) 4

Slika 3 - Joomla administratorski vmesnik 1.2.3. Drupal Prva različica sistema Drupal je izšla januarja 2001. Dries Buytaert je sprva napisal Drupal zase in za svoje prijatelje, da bi lahko na enem mestu delili različne informacije, kot npr. kje bodo večerjali, zanimive novice, kakšen je status njihovega omrežja, Ta spletna stran se je včasih nahajala na naslovu Drop.org. (Our history, b.d.) Njegov razvoj je hitro šel naprej in Drupal je postal izjemno fleksibilna platforma za forume, bloge ostale spletne strani ter spletne aplikacije. (Yoko, 2016) Kot prej omenjena CMS-ja, lahko tudi Drupal razširimo z moduli in temami. Trenutno na uradni spletni strani (https://www.drupal.org/project/project_module) najdemo 34790 modulov. 5

Slika 4 - Drupal administratorski vmesnik 6

1.3. Zakaj odločitev za CMS? Pred obstojem CMS-jev, so razvijalci morali zgraditi spletno stran, ki se je začela kot prazen dokument. Sami so morali napisati vso HTML, CSS in JavaScript kodo. Ta pristop ima svoje prednosti in slabosti. Omogoča nam popoln nadzor in fleksibilnost spletne strani za ceno kompleksnosti tako z vidika razvijalca, kot končnega uporabnika. CMS-ji so se razvili z namenom bistvenega olajšanja procesa ustvarjanja, vzdrževanja in urejanja spletnih strani. Hitro so postali zelo popularni in trenutno jih uporablja večina manjših in srednje velikih podjetij. (Northcutt, 2013) V šolstvu se CMS-ji veliko uporabljajo za spletne učilnice, kjer učitelji objavljajo novice, gradiva za učence, obvestila o ocenah, rezultatih tekmovanj, Na OŠ Trebnje (in verjetno še na kakšnih drugih šolah) pa uporabljajo sistem Joomla! tudi za predstavitveno spletno stran šole (http://www.os-trebnje.si), kjer redno objavljajo novice in koristne povezave.»uspešna uvedba CMS-ja pa pomeni dvig kvalitete dela in običajno pobude k uvajanju IKT-ja tudi na drugih področjih delovanja šole«(harej, 2004) 7

2. Predstavitev sistema Plone 2.1. Splošno Plone je brezplačen in odprtokoden sistem za upravljanje vsebine, ki teče na aplikacijskem strežniku Zope. Zope je programsko ogrodje (angl. software framework), ki zagotavlja pogoje za ustvarjanje spletnih aplikacij in hkrati tudi strežniško okolje, na katerem bodo te aplikacije tekle. (Application server, 2016) Ker je to okolje napisano v jeziku Python, je Plone primarno napisan v istem jeziku. Približno 10% Plonove kode je osnovane na jeziku XML, sestavlja pa ga tudi veliko HTML, CSS in JavaScript datotek. Python je relativno velika posebnost sistema Plone, glede na to, da velika večina CMS-jev (WordPress, Joomla, Moodle, ) sloni na jeziku PHP. Pravzaprav trenutno kar 82.1% spletnih strani uporablja jezik PHP, medtem ko le 0.2% spletnih strani uporablja Python. (Comparison of the usage of PHP vs. Python for websites, 2016) Kljub tem številkam pa ne smemo kar tako zanemariti Pythonove zmogljivosti. Naj samo omenim, da npr. podjetje Facebook uporablja jezik PHP, Google pa uporablja Python. (Hakim, 2011) Python se mi zdi vredno poudariti tudi zaradi tega, ker so ga različne fakultete (tudi slovenske) vpeljale v svoje programe, zato menim, da bo popularnost in raba Pythona (ter posledično morda tudi Plona) skozi čas zelo narasla. Slika 5 - število fakultet, ki poučujejo enega izmed sedmih izbranih programskih jezikov (Slika pridobljena s http://m.cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-mostpopular-introductory-teaching-language-at-top-us-universities/fulltext.) Plone se najbolj pogosto uporablja v intranetih in za spletne strani velikih organizacij. Med najbolj odmevnimi imeni služb javnega sektorja, ki uporabljajo Plone, so: FBI, brazilska vlada, Združeni narodi, mesto Bern, vlada New South Walesa in Evropska agencija za okolje. 8

Zagovorniki Plona navajajo, da sta najpomembnejša razloga za izbiro sistema: izjemni rezultati na področju varnosti (več o tem v razdelku 2.7) in njegova dostopnost. (Plone (software), 2016) Leta 2008 in 2009 je bil Plone s strani podjetja Packt Publishing izbran kot najboljši ne-php odprtokodni sistem za upravljanje vsebin. (Plone wins 2009»Best Other Open-Source CMS«Award, 2009) Trenutno je na uradnem viru Plonovih produktov (https://pypi.python.org/pypi?:action=browse&c=518) objavljenih 2828 produktov, ki so kompatibilni z vsaj eno verzijo sistema Plone. Z najnovejšo verzijo je zaenkrat kompatibilnih le 230 produktov. Sistem je preveden v 40 jezikov. Kar se tiče dokumentacije, je Plone relativno močan. Relativno pravim zaradi tega, ker sem odkril, da za zadnjo verzijo sistema (5.0) precej elementov manjka oz. so napisani nepopolno. To je lahko utrujajoče za začetnike, saj je težko priti do željenih informacij, delež uporabe sistema Plone pa je v primerjavi z najbolj popularnimi sistemi za upravljanje vsebine nizek. Podjetje Six Feet Up, ki je eno izmed vodilnih ponudnikov storitev svetovanja v severni Ameriki pa zatrjuje, da lahko po svetu najdemo nekaj več kot 300 podjetij, ki nudijo profesionalno svetovanje pri postavitvi in uporabi sistema Plone. (Plone - The Open Source Enterprise CMS, b.d.) Slika 6 - Plone logo (Slika pridobljena s https://commons.wikimedia.org/wiki/file:plone-logo.svg.) 2.2. Kratka zgodovina Projekt Plone se je začel leta 1999. Prvi so ga začeli razvijati Alexander Limi, Alana Runyan in Vidar Andersen. Projekt je kmalu pridobil svojo skupnost, v kateri so uporabniki razvili mnogo novih dodatkov (angl. add-ons). S časom se je ta skupnost vse bolj širila in to je vodilo k organiziranju letnih Plone konferenc, ki danes še vedno potekajo. Poleg teh konferenc se razvijalci iz celega sveta dobivajo na srečanjih, ki trajajo od nekaj dni do celega tedna in tako nadgrajujejo Plone. Prva stabilna verzija sistema Plone je izšla 6. februarja 2003. Od takrat so v razvoj sistema vložili več kot 4617 dni razvijalskega dela. Vse do zadnje verzije (ki je izšla 28. septembra 2015) so za razvoj posamezne verzije potrebovali povprečno 350,75 dni. Zadnjo (5.0) pa sem izpostavil ravno zaradi tega, ker so za njen razvoj potrebovali 898 dni, kar je približno 2,5-krat več, kakor za ostale. To niti ni tako presenetljivo, glede na to, da so s to verzijo vpeljali korenite spremembe glede načina dela s tipi vsebine (angl. content types več o tem v razdelku 2.6) in vizualnim prilagajanjem spletnih strani (angl. theming) s pomočjo orodja Diazo (več o tem v razdelku 2.5.2). Trenutno lahko na uradni strani sistema (https://plone.org/) brezplačno prenesemo verzijo 5.0.5. (Plone (software), 2016) 9

2.3. Namestitev sistema Plone Odločil sem se, da v tem razdelku ne bom opisoval celotnega procesa namestitve sistema, saj lahko najdemo dovolj natančna navodila v uradni Plonovi dokumentaciji (http://docs.plone.org/manage/installing/installation.html). Predstavil bom raje dva načina v katerih lahko teče spletna stran, izdelana v sistemu Plone. To sta»standalone«in»zeo Cluster«. Enega izmed teh načinov si moramo nujno izbrati ob nameščanju sistema Plone, obstajajo pa tudi načini, kako potem kasneje preiti iz enega na drugega in obratno. Standalone način je načeloma namenjen za razvoj in testiranje, medtem ko je ZEO Cluster bolj ustrezen za produkcijo. ZEO Cluster način dovoljuje istočasno uporabo ene podatkovne baze iz več različnih Zope instanc (ali bolj natančno»zeo clients«). To so običajno kopije spletne strani, ki jih lahko ločeno zaženemo na različnih vratih (angl. ports). Iz mojih praktičnih izkušenj to izgleda tako, da imamo običajno ustvarjeni dve instanci (»client1«in»client2«), ki tečeta na različnih vratih. Ena izmed njih je»glavna«, ki je aktivna večino časa, na drugi pa se istočasno lahko delajo popravki. Če so ti popravki npr. vnosi v bazo, se sprememba takoj odraža tudi na»glavni«instanci, saj uporabljata isto podatkovno bazo. Če pa so to popravki npr. vizualnega izgleda strani, se te spremembe beležijo v predpomnilnik in se na»glavni«instanci uveljavijo šele ob ponovnem zagonu le-te. To je lahko izjemno koristno, ko npr. skrbimo za neko spletno stran, ki nikakor ne sme prenehati z delovanjem do neke ure. Torej to pomeni, da bi razvijalec lahko delal (in testiral) razne popravke le po tej določeni uri. Z dvema instancama pa brez težav pripravi popravke kadarkoli in jih potem s ponovnim zagonom instance uveljavi ob primernem času. ZEO Cluster zaradi več Zope instanc porablja več prostora in procesorske moči, kar lahko vodi do preobremenitve strežnika. Način Standalone je zato bolj primeren za razvoj in testiranje, saj uporablja le eno Zope instanco. (Zope Zeo vs. standalone setups, 2008) Ko uspešno opravimo namestitev sistema Plone in zaženemo ustvarjeno instanco, bi morali (običajno na naslovu localhost:8080) v brskalniku videti nekaj podobnega spodnji sliki. Slika 7 - uspešno nameščen Plone 2.4. Uporabniški vmesnik Po uspešni namestitvi sistema Plone moramo ustvariti svojo stran (t.i. portal), ki bo tekla na prej ustvarjeni instanci. Tukaj lahko določimo nekaj lastnosti (privzet jezik strani, urejevalnik besedila, ), 10

ki jih bo stran imela. Na tej točki to niti ni tako pomembno, saj vse te nastavitve lahko potem tudi kasneje spremenimo. Ko se prebijemo čez teh nekaj korakov, bi morali na novo ustvarjeni spletni strani videti pozdravno stran sistema Plone. Slika 8 - pozdravna stran sistema Plone Prijavljeni uporabniki imajo (če tako želimo) dostop do orodne vrstice, iz katere lahko dodajajo, urejajo, brišejo vsebino, - odvisno od nivoja dostopa, ki jim ga dodelimo. 11

Slika 9 - orodna vrstica 2.4.1. Administratorski vmesnik (Nastavitve spletišča) Dostop do nastavitev spletišča imajo samo uporabniki z administratorskimi pravicami. 12

Slika 10 - nastavitev spletišča Tukaj lahko spreminjamo kar precej nastavitev, ki se tičejo delovanja, izgleda, vsebine in vzdrževanja spletne strani. Določimo lahko npr. elektronski naslov, iz katerega se bodo pošiljala avtomatska obvestila o novo ustvarjenih novicah, uredimo vizualen izgled spletne strani (Diazo, razdelek 2.5.2), dodamo nov tip vsebine (razdelek 2.6), pregledujemo napake,»pakiramo«2 bazo, ponovno zaženemo Zope instanco,... 2 To je izraz, ki ga najdemo v uradnem slovenskem prevodu sistema Plone. S pakiranjem podatkovne baze prihranimo nekaj prostora na strežniku, saj tako zavržemo podatke, ki se shranjujejo zaradi operacije»razveljavi«. 13

2.4.2. Zope Management Interface ZMI Zope Management Interface je okolje, v katerem lahko nadzorujemo in manipuliramo z Zope objekti ter konfiguriramo nastavitve spletne aplikacije. (Using the Zope Management Interface, b.d.) Slika 11 - pogled na ZMI Primer, ki po mojem mnenju dobro ponazori uporabo ZMI-ja in razliko med nastavitvami, ki jih ponuja Plonov vmesnik je sledeč: Vsakemu tipu vsebine lahko določimo privzet pogled (angl. View) in v pogledu je zapisano, kako bodo podatki znotraj tipa vsebine prikazani. To storimo v Plonovem grafičnem vmesniku, kjer imamo npr. za prikazovanje mape, v kateri so samo slike, nastavljen privzet pogled»album view«. Če pa želimo ta pogled prilagoditi specifičnim uporabnikovim željam, moramo najprej definirati, kako bo ta pogled izgledal oz. katere podatke bomo v njem prikazovali. To storimo tako, da na datotečnem sistemu ustvarimo novo predlogo (načeloma lahko urejamo tudi obstoječo predlogo), ki jo potem v ZMI-ju dodamo tipu vsebine»mapa«. Šele ko smo to storili, imamo v Plonovem vmesniku možnost dodeliti novo ustvarjen pogled temu tipu vsebine. Na spodnji sliki so prikazani možni pogledi za tip vsebine»mapa«. Kot vidimo, se znotraj nahaja tudi»album_view«. Slika 12 - možni pogledi tipa vsebine "Mapa" v ZMI 14

Slika 13 - možni pogledi tipa vsebine "Mapa" v Plonovem vmesiku S tem konkretnim zgledom sem želel povedati, da nam ZMI v praksi omogoča en nivo dostopa več, kot ga ima skrbnik spletišča. V tem vmesniku lahko dodajamo TTW (Through The Web) Python skripte, s katerimi zlahka npr. preverjamo veljavnost obrazcev (angl. forms), delamo preusmeritve, skratka vse operacije, ki nimajo nobenega opravka z objekti, saj smo zaradi varnosti pri TTW skriptah omejeni na Restricted Python. Več o tem v razdelku 0. TAL 2.5. Predloge (Templates) 2.5.1. TAL, TALES in METAL TAL (Template Attribute Language) je jezik za pisanje predlog, ki dinamično generirajo HTML vsebino. Običajno se uporablja znotraj veljavnih HTML značk, lahko pa tudi HTML značke napišemo znotraj TAL izraza (vendar to ne ustvari HTML strukture na spletni strani). V TAL izrazih lahko definiramo spremenljivke, določamo pogoje, zanke, nadomestimo vsebino HTML značke in dinamično določamo atribute (npr.»href«pri znački <a>). Oglejmo si naslednji TAL izraz: <a tal:attributes="href google.com" tal:content="povezava do Google.com"> Karkoli </a> Z ukazom»tal:attributes«določimo atribut»href«značke <a>, z izrazom»tal:content«pa smo določili tekst, ki se običajno nahaja med začetkom in koncem HTML značke - <a> TEKST </>. Beseda»Karkoli«se zaradi izraza»tal:content«nadomesti s tekstom»povezava do Google.com«. Zgornji izraz bo generiral povsem običajno HTML povezavo na google.com, z naslovom»povezava do Google.com«. Konkretno ta izraz bi lahko brez težav napisali tudi brez uporabe jezika TAL: <a href="google.com"> Povezava do Google.com </a>. Veliko dela pa nam lahko prihrani»tal:repeat«. Oglejmo si še en konkreten zgled: 15

<input type "text" tal:repeat="n python:range(10)" /> Namesto da bi napisali 10»navadnih«HTML izrazov, nam bo zgornji izraz generiral 10 vnosnih polj z eno vrstico kode. Naj omenim, da sem pri tem zgledu že uporabil TALES sintakso, ki omogoča uporabo»python«izrazov več o tem v sledečih vrsticah. Poleg»tal:attributes«in»tal:content«ima TAL še nekaj drugih možnih izrazov: - tal:define - tal:condition - tal:repeat - tal:replace - tal:omit-tag Opise teh izrazov si lahko ogledate na http://www.owlfish.com/software/simpletal/tal-guide.html. TALES TAL izrazi postanejo mnogo bolj uporabni z uporabo TALESa (TAL Expression Syntax). Kot že samo ime pove, so TALES vsi izrazi uporabljeni znotraj TAL izrazov. S TALESom večinoma pišemo poizvedbe za objekte v bazi podatkov. Najpreprostejši primer bi bil verjetno naslednji: <p tal:content="knjiga/poglavje/title"> </p> Takim izrazom rečemo»path«, ker v zgornji poizvedbi povemo»pot«do lastnosti objekta, ki jo želimo prikazati, ali z njo narediti kaj drugega. V zgornjem zgledu bomo v HTML znački <p> prikazali naslov poglavja, ki se nahaja v mapi»knjige«in je lastnost objekta»poglavje«, ki je v mapi»knjige«. Poleg»path«izrazov TALES ponuja še naslednje možnosti: - exists - nocall - not - string - python -? Spodaj navajam še en primer»python«izraza, ki se ga po mojih izkušnjah poleg»path«izrazov največ uporablja v Plonovih predlogah, razlage ostalih pa si lahko ogledate na: http://www.owlfish.com/software/simpletal/tal-guide.html <p tal:content="python:user.getusername().capitalize()"> User Name </p> Ta izraz bo v značko <p> izpisal uporabniško ime trenutno prijavljenega uporabnika z veliko začetnico. Iz tega primera vidimo, da lahko s Python sintakso dostopamo do objektov in njihovih lastnosti (uporabniško ime) nad katerimi lahko potem tudi uporabljamo vgrajene Python funkcije (capitalize()). To je običajno uporabno za»manjše«operacije nad lastnostmi objektov, kajti v»python«izraz lahko napišemo le eno vrstico Python kode. 16

METAL Pri delu s predlogami lahko opazimo, da se določeni deli ponavljajo. Npr. ko želimo prikazati vsebino neke mape, moramo vedno na enak način pridobiti vsebino mape in jo izpisati (razen seveda če želimo nek specifičen prikaz vsebine mape). Ali pa npr. ko želimo na vseh podstraneh imeti enako glavo (angl. header) in nogo (angl. footer) kot na prvi strani. V tem primeru nam lahko zelo koristijo METAL izrazi (Macro Expansion for TAL). Oglejmo si kar en konkreten zgled: <div metal:define-macro="footer">copyright </div> <span tal:content="page/lastmodified"></span> Ta izraz bo izdelal makro z imenom»footer«, ki bo ustvaril <div> značko, v kateri bo zapisana beseda»copyright«in poleg nje, bo v znački <span> zapisan datum zadnje spremembe spletne strani. Poleg»metal:define«poznamo tudi druge METAL izraze: - metal:use-macro - metal:define-slot - metal:fill-slot Razlage posameznih izrazov si lahko ogledate na spletni strani: http://www.owlfish.com/software/simpletal/tal-guide.html 2.5.2. Diazo Orodje Diazo je novost sistema Plone 5.0. No, ne ravno novost, tudi prej se je dalo uporabljati Diazo, ni pa bil privzeto tako lepo implementiran v sistem Plone, kot je sedaj. Do te verzije so se za pisanje predlog večinoma uporabljali jeziki, omenjeni v prejšnjem razdelku. Seveda pa tudi v verziji 5.0 še vedno lahko uporabljamo stare predloge, vendar pri podjetju Plone stremijo na popoln prehod k Diazu. Diazo predstavlja precej zanimiv koncept urejanja vizualnega izgleda spletne strani, ki vsebuje dinamične elemente. Pri TAL predlogah sta jezika TAL in HTML nekako združena skupaj, pri čemer HTML skrbi za strukturo, TAL pa za pridobivanje elementov iz objektne baze ZODB (Zope Object Database). Diazo pa ločuje statično HTML predlogo in XML datoteko»rules.xml«, v katero dodajamo t.i. pravila, ki določajo kateri Plonovi elementi bodo prikazani na določenem mestu, prej definiranem v HTML kodi. Tako potem postopoma»pretvarjamo«statično spletno stran v dinamično. Vse to lahko počnemo direktno iz brskalnika, saj ima Plone že vgrajen urejevalnik predlog. 17

Slika 14 - urejevalnik Diazo predlog 2.5.3. CSS in JS CSS in JavaScript datoteke na spletnem portalu ustvarjenem v sistemu Plone, dodajamo na podoben način kot pri statičnih HTML dokumentih. Razlika je le v tem, da moramo pri statičnih spletnih straneh za vsako stran posebej dodati poti do CSS in JS datotek, Plone pa ima privzeto ustvarjen»main template«, ki se upošteva na vseh ustvarjenih podstraneh, zato lahko poti do CSS in JS datotek dodamo le v to datoteko. 2.6. Content Types Tipi vsebine so lahko zbirniki (angl. containers) ali posamezni elementi. Zato včasih na spletu zasledimo izraza»folderish«in»non-folderish«, ki označujeta to distinkcijo. Vsak tip vsebine ima svojo shemo, t.j. množico polj, ki določajo lastnosti (naslov, privzete vrednosti, omejitve, ) tega tipa. Shema tipa vsebine se upošteva na vsakem novo ustvarjenem objektu tega tipa. Primer tipa vsebine je npr.»dežurstvo«, ki mu v shemi določimo polja različnih podatkovnih tipov. V Plonu sta za vsak tip vsebine privzeto nastavljeni polji»naslov«tipa»string«(iz katerega se potem kreira ID objekta tipa»dežurstvo«) in»opis«tipa»text«. Potem pa mu lahko dodamo še ostala polja, 18

npr.»dežurni tehnik«tipa»string«,»opomba«tipa»text«, Tako se v bazo shranjujejo objekti tipa»dežurstvo«, ki vsebujejo lastnosti»naslov«,»opis«,»dežurni tehnik«,»opomba«, Slika 15 - primer tipa vsebine "File" 2.7. Varnost Razvijalci sistema Plone dajejo velik poudarek na varnost. Če pogledamo v podatkovno bazo pogostih ranljivosti in izpostavljenosti (Common Vulnerabilities and Exposures (CVE) Database), ki jo gosti podjetje Mitre namreč opazimo, da je imel Plone do 29.5.2013 v primerjavi z ostalimi aktualnimi CMS-ji najmanjše število prijavljenih ranljivosti. To je tudi velik razlog, zakaj se je veliko vladnih in nevladnih organizacij odločilo za sistem Plone med drugimi tudi FBI. Spodnja tabela prikazuje število pogostih ranljivosti in izpostavljenosti. Poudariti je treba, da so v teh podatkih zajete ranljivosti osnovnega sistema Plone in tudi modulov, ki jih niso razvili primarni Plonovi razvijalci. (Plone (software), 2016) 19

Primerjava pogostih ranljivosti in izpostavljenosti CMS Leto izdaje Število pogostih ranljivosti in izpostavljenosti Plone 2003 62 Joomla 2005 638 Wordpress 2003 934 Drupal 2001 969 2.7.1. Restricted/Unrestricted Python Plone uporablja dve vrsti dostopa do Pythonovih modulov Restricted (z omejitvami) in Unrestricted (brez omejitev). Restricted Python je okolje, ki ima odstranjenih nekaj funkcij (npr. funkcijo»invokefactory()«za kreiranje novih objektov). Glavni razlog za uvedbo tega okolja je bil, da so te funkcije lahko nevarne v spletnem okolju, kot je Plone. Nevarne v smislu, da bi omogočile nepreverjenim uporabnikom dostop do Python kode v sistemu. Seveda pa takemu uporabniku ne želimo dovoliti dostopa do datotečnega sistema strežnika. Restricted Python skripte so zato prevedene z drugim prevajalnikom kakor Unrestricted Python skripte in vsak klic funkcije je posebej preverjen pri»upravljalcu varnosti«. To se zgodi z vso Python kodo, ki jo dodamo preko Zope Management Interface-a (ZMI). Restricted Python je omogočen v TTW skriptah in zastarelem načinu kodiranja, ki se uporablja v npr.: - starih TAL predlogah vse kar je napisano v tal:content, tal:condition, itd. - datotekah tipa Script(Python), ki so se uporabljale za preverjanje obrazcev Kot zanimivost, v dokumentaciji za trenutno najnovejšo verzijo sistema Plone sem glede Restricted Pythona zasledil tudi tole:»restrictedpython was bad idea and mostly causes headache. Avoid through-the-web Zope scripts if possible.«(sandboxing and RestrictedPython, b.d.) Po lastnih izkušnjah lahko povem, da se z zgornjo izjavo popolnoma strinjam. Unrestricted Python skripte se izvedejo normalno, brez omejitev in imajo popoln dostop do aplikacijskega strežnika Zope. To dosežemo s pisanjem lastnih produktov (add-ons), ki jim dodamo poglede (angl. views). Produktom lahko dodamo tudi lastne tipe vsebine, v katerih definiramo polja (npr. cena izdelka, kategorija, ) in funkcije (ki npr. napolnijo prej definirana polja s privzetimi vrednostmi). Te lastnosti imajo potem vsi novo ustvarjeni objekti tega tipa. Unrestricted Python skripte se nahajajo izključno na datotečnem sistemu strežnika (ne moremo jih urejati TTW), kar zagotavlja dodaten nivo varnosti, saj bi nepridiprav za spreminjanje teh skript 20

potreboval direkten dostop do strežnika samo administratorsko geslo za dostop do spletne strani ne bi bilo dovolj. (Sandboxing and RestrictedPython, b.d.) 2.7.2. Varnostne kopije (Backups) Za uporabnike sistema Plone je proces kreiranja varnostnih kopij zelo preprost. Kopije se naredijo avtomatsko, v vsakem trenutku pa imamo na našem datotečnem sistemu v mapi./var/filestorage dve datotek: Data.fs in Data.fs.old. V teh datotekah je shranjeno vse, razen BLOB-ov (angl. Binary Large OBjects), ki pa vsebujejo razne PDF datoteke, slike, videe, in so shranjeni v./var/blobstorage. Spodnja slika prikazuje pogled na»vzdrževanje«v nastavitvah spletišča, kjer lahko med drugim tudi pakiramo našo bazo in tako prihranimo nekaj prostora na disku. Slika 16 pogled na "Vzdrževanje" v nastavitvah spletišča Pred vsakim posegom v bazo, je priporočljivo kopirati vsaj datoteko Data.fs. To lahko uredimo avtomatsko z različnimi orodji, kot so npr. Rsync, Bakula, Imel sem že izkušnjo, ko sem naredil napako v neki skripti in»izgubil«podatke za nekaj let nazaj. V takem primeru je potrebno najprej ugasniti Zope strežnik, nadomestiti trenutno datoteko Data.fs s staro, ponovno zagnati Zope strežnik in podatki so nazaj. Zelo preprosto in učinkovito. 2.7.3. Zope Object Database (ZODB) Po mojem raziskovanju sem ugotovil, da ZODB niti nima bistveno različnih funkcionalnosti od drugih objektnih baz, zato me je bolj zanimala razlika med objektnimi in relacijskimi bazami na splošno. Raziskal sem tudi, zakaj se objektne podatkovne baze tako malo uporabljajo. Če bi bralca zanimale specifične lastnosti ZODB-ja, si lahko prebere članek gospoda Jima Fultona, ki je kreator ZODB-ja: http://www.ibm.com/developerworks/aix/library/au-zodb/index.html Pri mojem raziskovanju sem se najprej vprašal, katere podatkovne baze so trenutno najbolj aktualne. Podatke sem pridobil iz spletne strani http://db-engines.com/en/ranking, ki trenutno spremlja popularnost 308 podatkovnih baz. Več o njihovem sistemu točkovanja si lahko preberete na: http://db-engines.com/en/ranking_definition 21

Slika 17 - trenutno najbolj popularne podatkovne baze Iz zgornje slike lahko jasno vidimo, da so krepko v prednosti relacijske podatkovne baze. Prva objektno orientirana baza se nahaja šele na 82. mestu, medtem ko ZODB najdemo šele na 139. mestu. Torej več kot očitno objektne baze niso ravno popularne. Toda zakaj, če pa so sedaj objektni programski jeziki (Python, Java, C#) tako razširjeni? Našel sem nekaj odprtih tem na dovolj zanesljivih forumih (stackoverflow.com, stackexchange.com) in najpomembnejša razloga, zakaj se razvijalci raje odločijo za relacijske podatkovne baze sta naslednja: 1. Veliko razvijalcev ima izkušnje le iz relacijskega modeliranja podatkov. Da bi se naučili uporabljati objektno orientirane baze, bi se morali naučiti popolnoma drugačnega modeliranja in razmišljanja o podatkih. To pa je lahko zelo težko in dolgotrajno. 2. Relacijske baze so se razvijale izredno dolgo časa, zato so sedaj precej izpopolnjene in podkrepljene z matematičnimi teorijami (teorija množic). Tudi brezplačne relacijske baze uporabljajo napreden način optimizacije in tehnike indeksiranja. Poleg tega je shranjevanje in indeksiranje podatkov v take baze zelo preprosto, kar pa ne moremo reči za objektne baze. (Why aren't OODBMS as widespread as RDBMS?, 2009) Objektne podatkovne baze lahko operirajo z bolj kompleksnimi podatkovnimi tipi. Relacijske baze shranjujejo preproste podatke, kot so npr. imena in priimki zaposlenih v nekem podjetju, objektne baze pa lahko shranjujejo tudi slike, video posnetke, CAD (angl. Computer Aided Design) objekte Toda v relacijskih bazah se morajo že večvrednostni atributi (angl. multivalued attributes) zapisati vsak v svojo tabelo; torej kako potem objektne baze shranjujejo te kompleksne podatke? Na spletu sem našel preprosto analogijo, ki gre takole: Shranjevanje podatkov je kakor parkiranje avtomobila v garažo, kjer garaža predstavlja podatkovno bazo. Pri objektnih bazah lahko zapeljemo cel avtomobil v garažo, izklopimo motor in ga pustimo nedotaknjenega, v pripravljenosti za naslednjo vožnjo. Pri relacijskih bazah pa bi ga morali razdreti na posamezne dele, te dele shraniti na različne police in ko bi ga hoteli naslednjič voziti, bi ga morali ponovno sestaviti nazaj. Predstavljajmo si sedaj, kaj se zgodi, ko res želimo iti na vožnjo, s katerim od teh parkiranih avtomobilov. Pri razstavljenem vozilu bi potrebovali mehanika nekoga, ki govori pravi jezik da bi avtomobil pravilno deloval, ko bi ga sestavil nazaj. Pri avtomobilu, ki smo ga celega zapeljali v garažo in ga takega tam tudi pustili pa bi potrebovali le toliko»komunikacije«, da bi mu lahko dopovedali, da ga želimo vžgati z vstavljanjem in obračanjem ključa. Tukaj pa potem ne potrebujemo znanja nekega drugega jezika. 22

Še ena velika prednost shranjevanja avtomobilov (objektov) v celoti je tudi, da lahko do njih dostopamo kot do posamezne enote, brez vpliva na ostale objekte. Pri relacijskem modelu bi morali npr. zakleniti celotno tabelo, da bi v njej posodobili en par vrednosti. Pri objektnih bazah pa dostopamo do lastnosti na ravni objekta, kar je npr. bolj optimalno za shranjevanje geometrijskih CAD objektov, medtem ko so za shranjevanje finančnih podatkov relacijske podatkovne baze običajno boljša izbira. (Object oriented databases, 2011) 23

3. Govorilne ure Sedaj ko sem predstavil teoretični del sistema Plone pa se lotimo še pregleda praktičnega dela zasnove orodja za prijavo na govorilne ure. V tem delu bom predstavil mojo idejo o izvedbi takega orodja. Pri snovanju tega dela sem sodeloval z Osnovno šolo Trebnje, s katero smo se pogovarjali o njihovih željah in potrebah glede funkcionalnosti takega orodja. 3.1. Predstavitev delov izdelave orodja 3.1.1. Content types Za zasnovo tega orodja sem potreboval le en tip vsebine. Poimenoval sem ga»gu«(krajše za»govorilna ura«). V Plone-u ima vsak tip vsebine privzeti polji (lastnosti)»naslov«in»opis«. Tipu»gu«pa sem dodal še tekstovno polje»termini«, ki bo za namen zasnove tega orodja služilo shranjevanju imen in priimkov staršev ter termina na katerega so se prijavili. Slika 18 - polja (lastnosti) podatkovnega tipa "gu" 24

Polje»Naslov«je privzeto zaradi tega, ker se iz vpisane vrednosti ustvari ID objekta, sicer bi morali ID objekta določiti ročno, kar pa je za večino uporabnikov popolnoma nepotrebno. Če bi želeli privzeta polja odstraniti (ali pa spremeniti še kakšno drugo lastnost tega podatkovnega tipa), lahko to storimo v Zope Management Interface-u, kjer tip»gu«izgleda tako: Slika 19 - tip "gu" v ZMI Poleg lastnosti v ZMI-ju, lahko tip vsebine izvozimo na datotečni sistem strežnika in ga tam povežemo s Python skripto, ki se izvede ob vsaki novi kreaciji objekta tipa»gu«. V taki Python skripti lahko definiramo funkcije, ki pripadajo objektu. Tukaj je pomembno omeniti, da gre za Unrestricted Python skripto, ki se lahko izključno nahaja le na datotečnem sistemu in ne v Zope Management Interfaceu, kjer lahko pišemo (Restricted Python) skripte direktno iz brskalnika (TTW). 25

3.1.2. Uporabnik Slika 20 - Python skripta tipa vsebine "gu" 3.1.2.1. Izbira učitelja Na OŠ Trebnje so povedali, da se starši oz. skrbniki otrok pri njih načeloma ne prijavljajo na govorilno uro pri razredniku, zato bi želeli, da se prijavijo direktno pri učitelju, ki tega otroka uči. Torej če starša 26

zanima mnenje učitelja o otrokovem znanju slovenščine, se lahko direktno prijavi pri njem. Lahko se prijavi k več učiteljem, ima pa se možnost prijaviti tudi pri razredniku ki bo v sistemu tretiran kot en od učiteljev, brez posebnih dodatnih lastnosti. Ker je na OŠ Trebnje trenutno nekaj manj kot 100 učiteljev, sem želel izbiro učitelja narediti čim bolj prijazno in učinkovito uporabnikom. Enostaven seznam iz katerega bi starš izbral učitelja, se mi zaradi velikega števila učiteljev ni zdel dobra ideja. Ker pa en učitelj lahko poučuje več predmetov in en predmet lahko poučuje več učiteljev, se mi tudi ločitev samo po predmetih ni zdela dovolj dobra. Na koncu sem se odločil za filter učiteljev, ki podpira filtriranje po imenih, priimkih ali predmetih. Za to sem uporabil jquery vmesnik»autocomplete«, ki ga lahko brezplačno prenesemo iz spletne strani https://goodies.pixabay.com/jquery/auto-complete/demo.html. Končni rezultat naj bi izgledal približno tako: Slika 21 - filtriranje po imenih in priimkih Slika 22 - filtriranje po predmetih 3.1.2.2. Izbira razpisane govorilne ure Po tem, ko uporabnik izbere željenega učitelja in potrdi izbiro, se mu odpre modalno okno z razpisanimi govorilnimi urami za tega učitelja. Torej, če učitelj na začetku leta razpiše termine za vse govorilne ure, ki jih bo imel v tekočem šolskem letu, se bodo v modalnem oknu prikazale povezave na vse te govorilne ure in prijava za njih bo omogočena. 27

Slika 23 - razpisane govorilne ure za izbranega učitelja Za izdelavo modalnega okna sem uporabil ogrodje (angl. framework) Foundation (http://foundation.zurb.com/), ki zelo olajša urejanje vizualnega izgleda spletne strani s svojimi CSS in JS knjižnicami, tako za velike namizne ekrane, kakor tudi za manjše ekrane mobilnih naprav (angl. responsive design). 28

3.1.2.3. Prijava/odjava Po izbiri razpisane govorilne ure, uporabnik pride na pogled razpisanih terminov za to uro. Trenutno zasedeni termini so posebej označeni in izbira tega termina je onemogočena vsem uporabnikom, dokler se prijavljeni uporabnik ne odjavi. Slika 24 - prijava in odjava iz govorilne ure Zaradi demonstracije izgleda TTW (Through The Web) Python skript, sem prijavo in odjavo od termina izdelal v Zope Management Interface-u namesto preko skript na datotečnem sistemu strežnika. Ker je cilj tega diplomskega dela le zasnova sistema za prijavo na govorilne ure, je vse skupaj narejeno precej ne robustno. Npr. v objekt»gu«shranjujem kar imena in priimke staršev (in ne IDjev), ki so se prijavili na termin in potem tudi pri odjavi preverjam, ali se to ime nahaja znotraj objekta. Do nepravilnosti pride, če se starš prijavi na govorilno uro, potem spremeni svoje ime oz. priimek in se poskuša spet prijaviti/odjaviti iz iste govorilne ure. Zaenkrat je to tako narejeno zaradi lažjega pregleda lastnosti, ki se shranjujejo v objekt, seveda pa bi bilo shranjevanje in prikazovanje teh podatkov treba popraviti. 29

3.1.3. Učitelj Slika 25 - odjava od termina TTW Python skripta 3.1.3.1. Razpis nove govorilne ure V tem koraku se dejansko kreira nov objekt tipa»gu«. To je za uporabnike (v tem primeru učitelje) sistema precej enostavno opravilo, kar je nekako tudi namen CMS-jev. Ker sem v sistemu Plone definiral tip vsebine»gu«in mu na datotečnem sistemu pripel Python skripto, se ob vsaki novi kreaciji objekta, na njem upoštevajo določene lastnosti (funkcije), s katerimi si pomagam pri opravljanju različnih operacij (inicializacija polj, shranjevanje in brisanje podatkov v in iz objekta). 30

Slika 26 - dodajanje nove govorilne ure preko orodne vrstice 3.1.3.2. Pregled prijav Kot sem že omenil v razdelku»6.1.2.3 Prijava/odjava«, se v objekt tipa»gu«zapišeta ime in priimek starša ter izbrani termin. Ker bodo do teh podatkov imeli dostop samo učitelji in skrbnik (ne starši), je trenuten vizualni izgled pregleda prijav za namen zasnove po mojem mnenju zadosten, da 31

demonstrira funkcionalnost. Za zapis podatkov v objekt poskrbi funkcija rezervirajtermin(), ki je pripeta objektu tipa»gu«in za parametra sprejme izbrani termin ter ime prijavljenega uporabnika. 3.1.4. Skrbnik Slika 27 - trenutni pregled prijav na govorilno uro 3.1.4.1. Uvoz uporabnikov OŠ Trebnje vsako leto obiskuje približno 700 učencev, kar pomeni, da je staršev in skrbnikov običajno nekje okrog 1400. Njihova baza uporabnikov se nahaja v programu LO.POLIS, za katerega skrbi podjetje Logos. Z OŠ Trebnje smo se dogovorili (pa tudi sicer mislim, da je to dovolj dobra splošna rešitev), da bo uvoz uporabnikov v sistem za prijavo na govorilne ure potekal dato, da se bo na strežnik naložila CSV (angl. comma separated values) datoteka, preko katere se bodo v sistemu Plone kreirali novi uporabniki. To pomeni, da se bo za vsakega uporabnika kreiralo uporabniško ime in geslo, določen pa bo tudi dostop, ki ga bodo ti uporabniki imeli. Ker nekaj staršev še vedno ne uporablja elektronske pošte, sem se odločil, da bom na začetku vsem uporabnikom dodelil isto geslo, ki ga bodo morali ob prvem vstopu v sistem spremeniti. Uvoz učiteljev bo potekal skoraj identično, le da bo za njih določen drugačen nivo dostopa. 32

4. Zaključek V diplomskem delu sem predstavil idejo za izdelavo osnovnih gradnikov spletnega orodja za prijavo na govorilne ure. Orodje sem za boljšo predstavo delno tudi izdelal v sistemu za upravljanje vsebine Plone. Najprej sem izpostavil nekaj osnovnih lastnosti sistemov za upravljanje vsebin in nato bolj podrobno opisal sistem Plone. Spoznal sem, da je Plone zelo zmogljiv in varen sistem s prijaznim uporabniškim vmesnikom. Za dopolnitev njegovih osnovnih funkcionalnosti je razvijalcem omogočeno pisanje lastnih produktov, kar pomeni, da je sistem popolnoma prilagodljiv. Ker je Plone zgrajen na jeziku Python, se tudi produkti pišejo v Pythonu, kar je po mojem mnenju velika prednost, glede na trenutno rast popularnosti tega jezika. Na praktičnem primeru zasnove spletnega orodja za prijavo na govorilne ure sem predstavil ključne procese pri delu s sistemom Plone. To je vsebovalo urejanje predlog, kreiranje lastnih podatkovnih tipov in produktov, preverjanje veljavnosti obrazcev in urejanje vsebine objektov. Vsi ti procesi so potrebni pri praktično vsakem spletnem orodju. V zasnovi sem vključil vse osnovne elemente funkcionalnega orodja za prijavo na govorilne ure. To pokriva izbiro učitelja, kreiranje nove govorilne ure, prijavo/odjavo od termina, pregled prijav in uvoz uporabnikov. Za izdelavo teh elementov sem moral preučiti, kako sistem Plone operira s podatki na datotečnem sistemu strežnika in kako so ti podatki potem uporabljeni v uporabniškem vmesniku. Zaradi obsega diplomskega dela sem se odločil, da bom izpustil primerjavo različnih CMSjev in raje bolj podrobno opisal sistem Plone in delo z njim. Ugotovil sem, da je Plone zaradi vseh svojih lastnosti zelo dober sistem za izdelavo kvalitetnega in fleksibilnega spletnega orodja»po meri«. 33

5. Viri in literatura Application server. (4.8.2016). Pridobljeno s https://en.wikipedia.org/wiki/application_server. Barker, D., 2015. Web Content Management: Systems, Features, and Best Practices. Sebastopol: O Reilly Media. Comparing Open Source CMSs: WordPress, Joomla, Drupal, and Plone. (maj 2009). Pridobljeno s http://www.idealware.org/custom-resources/tips/comparing-open-source-cmss-wordpressjoomla-drupal-and-plone Comparison of the usage of PHP vs. Python for websites. (28.7.2016). Pridobljeno s https://w3techs.com/technologies/comparison/pl-php,pl-python. Delmonte, M., 2009. The definitive guide to Plone. [Elektronski vir] 2. izdaja. New York: Berkeley, CA : Apress. Hakim, P. (25.8.2011). Python vs. PHP: Choosing your next project's language. Pridobljeno s http://www.techworld.com.au/article/398573/python_vs_php_choosing_your_next_project_langu age/. Harej, J. (2004). Sistemi za upravljanje z vsebinami. Pridobljeno s http://profesor.gess.si/marjana.pograjc/%c4%8dlanki_vivid/arhiv2004/06harej.pdf. Joomla. (28.7.2015). Pridobljeno s https://sl.wikipedia.org/wiki/joomla. Kohan, B. (2010). What is a Content Management System (CMS)?. Pridobljeno s http://www.comentum.com/what-is-cms-content-management-system.html. Northcutt, C. (15.1.2013). Why Choose A Content Management System For Your Site. Pridobljeno s https://blog.nexcess.net/2013/01/15/choose-content-management-system-for-your-site/. (Neznano). (26. april 2011). Object oriented databases [Video]. Pridobljeno s https://www.youtube.com/watch?v=7v_5vftkdvs. Our history. (b.d.). Pridobljeno s https://www.drupal.org/about/history. Palan, H. (b.d.). What is Web Presence? [Web log post]. Pridobljeno s http://www.hankpalan.com/blog/web-presence/what-web-presence Plone (software). (5.5.2016). Pridobljeno s https://en.wikipedia.org/wiki/plone_(software). Plone - The Open Source Enterprise CMS. (b.d.). Pridobljeno s http://www.sixfeetup.com/plone-cms/plone-cms-new. Plone wins 2009»Best Other Open-Source CMS«Award, 2009. (2009). Pridobljeno s http://www.enfoldsystems.com/news/2009-201cbest-other-open-source-cms201d-award. Sandboxing and RestrictedPython. (b.d.). Pridobljeno s http://docs.plone.org/develop/plone/security/sandboxing.html. Usage of content management systems for websites. (3.7.2016). Pridobljeno s https://w3techs.com/technologies/overview/content_management/all. 34