Stepan Roh's CGI Voting System 0.9.1 Použití ------- VoteSys je CGI hlasovací systém. Sestává z těchto hlavních částí : CGI skriptu votesys.cgi vlastní hlasovací skript mapovacího souboru soubor dodávající informaci o jednotlivých polích hlasovacího lístku (vytváří uživatel) datového souboru soubor uchovávající přehled o tom, co získalo kolik bodů (vytváří uživatel) šablony hlasovacího lístku vlastní hlasovací lístek ve formátu HTML (vytváří uživatel) šablony výsledkové listiny výsledková listina ve formátu HTML (vytváří uživatel) Instalace --------- Nejprve je nutno specifikovat veškeré databáze (stačí samozřejmě jedna). V dodaném souboru votesys.cgi je to ta část následující za řádkem '%user_db = ('. Chcete-li přidat novou databázi, stačí zkopírovat nějakou hotovou před řádek '};' a změnit hodnoty. První řádek definice databáze obsahuje jméno (v dodaném souboru je to 'example'). Význam jednotlivých parametrů (ve tvaru '' => ) je : votepage cesta k šabloně hlasovacího lístku pro cachování výstupu se používá tato cesta doplněná příponou .cache (vytvoří se automaticky) postpage cesta k šabloně výsledkové listiny pro cachování výstupu se používá tato cesta doplněná příponou .cache (vytvoří se automaticky) errpage URL chybové stránky pro nevyplněné formuláře datafile cesta k datovému souboru datatemp jméno dočasného datového souboru (používá se při změně databáze, aby se předešlo náhodnému smazání) vytvoří se automaticky mapfile cesta k mapovému souboru mail email, kam se mají posílat určené části hlasovacích lístků lock cesta k lock souboru (ten se využívá při zamykání databáze) vytvoří se automaticky používá se ještě jeden soubor se stejným jménem a příponou .cache mailing 0 značí, že se nemá odesílat žádná pošta (ale veškeré kontroly s tím související se pořád uplatňují) delim oddělovač položek v datovém a mapovacím souboru implicitně '::', což se používá i dále v textu Pak je možno změnit několik málo proměnných v programu : $user_defdb jméno databáze, která se použije, nespecifikoval-li ji klient $user_adm email na administrátora, uvede se na chybové stránce (která se ukáže při zhavarování skriptu) $user_log cesta k log souboru (uchovává chybové hlášky) $user_sendmail cesta k programu sendmail, který se využívá pro posílání emailu $user_block je-li nastavena na 1, budou veškeré požadavky odmítnuty vhodné při ruční opravě databází apod. Poté se musí napsat mapovací soubor, datový soubor a obě šablony. Do datového souboru napište na každý řádek '.::0'. Je-li před kategorií uveden znak '#', považuje se za zrušený a není zahrnut do hlasování. Nakonec ještě přidejte řádek 'total::0', který označuje celkový počet hlasujících. Nakonec ještě nesmíte zapomenout změnit cestu k interpretu jazyka Perl (který je, samozřejmě, nutný ke spuštění) na první řádce programu. Poslední nutností je mít knihovnu cgi-lib.pl umístěnou ve stejném adresáři jako votesys.cgi (nemáte-li ji, stáhněte si ji z mých stránek). Je-li skript vyvolán bez parametrů, tak vrátí hlasovací lístek, kde se musí vyskytnout formulář s metodou POST. Odešle-li tento formulář uživatel, zobrazí se mu výsledková listina. Ta se také zobrazí, je-li skript spuštěn s parametrem 'r'. Specifikace databáze se provede parametrem 'db='. Tyto parametry se uvádí za jménem skriptu, oddělené od něj znakem '?' a od sebe navzájem znakem '&'. Formát mapovacího souboru ------------------------- Mapovací soubor se skládá z řádků formátu '::', kde hodnota může být buď '.' nebo 'mail!' nebo 'mail'. Varianta se jménem kategorie způsobí, že se prvku se jménem jaké je obsaženo v dané CGI proměnné a v dané kategorii připočte daný počet bodů. Zbylé varianty pošlou obsah proměnné emailem. Varianta s vykřičníkem znamená, že daný údaj musí být uveden, jinak je hlasování neplatné. Formát HTML šablon ------------------ Kdekoliv v šabloně dojde k nahrazení '${}' za hodnotu z databáze ('jméno' musí být včetně jména kategorie). Druhou možností je '${:...}' , kde za '...' je možno dosadit kombinaci těchto příkazů tvaru ' ' či " ''" : sort |* určuje co se má zobrazit, hvězdička označuje všechny kategorie by name|value určuje dle čeho se má třídit (jméno či body) order asc|desc určuje jak se má třídit (vzestupně či sestupně) as určuje jak se má zobrazit každý výskyt '%n' se nahradí jménem, '%v' se nahradí počtem bodů a '\n' se nahradí znakem nové řádky top určuje kolik prvních se má zobrazit (-1 značí všechny) with deleted zrušené položky (jejich řádek v datovém souboru začíná na '#') budou prefixovány hvězdičkou (jinak se nezobrazují) from cache zopakuje předchozí konstrukci ${:...} je to rychlejší, jelikož si pamatuje výsledek Implicitními hodnotami jsou : sort * by name order asc as '%n : %v
\n' top -1 Pozor, celá tato konstrukce musí být na jednom řádku. Příklad databáze jménem 'comp' ------------------------------ mapovací soubor : jmeno::mail! 1.os::os.3 2.os::os.2 3.os::os.1 datový soubor : os.Linux::0 os.Windows::0 os.Mac OS::0 os.Solaris::0 total::0 hlasovací lístek : Hlasovací lístek
 
Výsledky výsledková listina : Výsledky Počet hlasujících : ${total} ${:sort os by value order desc as '
%n%v\n'}
Hlasuj! Změny mezi verzemi ------------------ Změny z verze 0.1 na 0.2 : přidání oblastí (class) přidání ${:...} příkazů ošetření proti hlasování bez určitých položek - 'mail!' ošetření proti vícenásobnému hlasování ve stejné kategorii pro stejné Změny z verze 0.2 na 0.3 : oprava chyb pozor, ${...} příkazy musí být na jednom řádku Změny z verze 0.3 na 0.4 : lepší ochrana proti vymazání databáze při výpadku serveru Změny z verze 0.4 na 0.5 : do ${:...} přidána volba 'with deleted' do ${:...} přidána volba 'from cache' Změny z verze 0.5 na 0.6 : přidána možnost vypnout odesílání pošty Změny z verze 0.6 na 0.7 : cachování výstupu Změny z verze 0.7 na 0.8 (23.9.1999) : blokovací režim možnost změny oddělovače položek v databázi a mapovacím souboru možnost mít více (oddělených) databází Změny z verze 0.8 na 0.9 (15.10.1999) : opravena chyba, kdy se netestovala úspěšnost zápisu do databáze a cache Změny z verze 0.9 na 0.9.1 (25.10.1999) : opraveny další chyby, kdy se ignorovaly návratové hodnoty doufejme, že toto je poslední před-finální verze Licenční podmínky viz license.txt.cz (c)1999,2000 Štěpán Roh http://srnet.cz/~stepan/sw/