Mappestruktur i archtreet

include

include brukes av webdelen og inneholder filer som ikke behøver å ligge på web. Dette inkluderer et bibliotek med conveniencemetoder og felles funksjonalitet til Billig. I utgangspunktet skal funksjoner som brukes mer enn ett script i webdelen legges her. De viktigste funksjonalitetene i modulen er beskrevet under.

Billig biblioteket

Billig::

Billig::Print::

Billig::Untaint::

templates

Templates i Billig er skrevet etter XHTML 1.1. For å validere output brukes et perlbibliotek som validerer HTML generert av templatemotoren. Motoren brukt er et annet perlbibliotek "Template Toolkit" (dokumentasjon finnes her: http://www.template-toolkit.org/docs/index.html). Valideringen bør skues av på produksjonsapplikasjonen. Dette styres av '$validate_html' i configfila.

Vi prøver å holde mest mulig logikk i webkoden og utenfor templates. Dette gir et logisk skille mellom visningslogikk og bedriftslogikk.

For å holde antall klikk nede bruker vi execute_others. Dette gjør det mulig å vise to templates og kjøre to script. Typisk bruksområder er at siden for fullført salg også skal vise siden for salg av nye billetter.

For å vise feilmeldinger brukes en liste med errors. Templates hvor feil kan oppstå har en forløkke som looper over denne listen og printer eventuelle feil.

web

I webkatalogen ligger alle filene som kan aksesseres fra web. Filene følger regler for kodestil, navngivning, flyt o.l. som beskrevet her.

Flyt i script

Perl er et funksjonelt språk og script kjøres fra topp til bunn. Feilsjekker fører til at scriptet gir nødvendig output og avslutter. Ved normal kjøring uten feil vil man forvente at programmet avslutter i bunn.

Indentering og kodestil.

Det beste rådet er å lese kode som allerede ligger inn. Men noen retningslinjer finnes

Når bruker man POST og GET

TODO: (vegarwe) flyt i script, indentering, navngiving av filer, et script pr funksjon, POST/GET

Webgrensesnitt

Grensesnittet er skrevet i Perl, og bruker Template Toolkit for generering av HTML. Man har også skrevet en Billig-modul hvor man har samlet generelle ting knyttet til rammeverket, printing og convenience-funksjoner. Alle templates ligger i ./templates, mens Perl-scriptene som kjøres ligger i ./web. Configfiler og Billig-modulene ligger i ./include, trygt utenfor webrooten, slik at man ikke ved et uhell eksponerer databasepassord og lignende. Systemet kan kjøre under både CGI og mod_perl, men yter naturlig nok bedre under sistnevnte. (Utover ytelsen er de to kjøremåtene stort sett identiske.)

Rammeverket som er laget, pakker inn funksjonaliteten fra Template Toolkit og tilbyr Billig::print_headers(), Billig::process_template() og Billig::execute_other(). (Det finnes også en del nyttefunksjoner relatert til bl.a. utskrift, feilhåndtering, databasetilkobling, tilgangskontroll, HMAC-generering, og mye mer – med unntak av utskrift, som ligger i Billig::Print, ligger det meste av slikt delt funksjonalitet rett i Billig-modulen.)

Når man selger billetter vil det bli dyttet PDF-er inn i en printerkø i databasen slik at winprint (printerdemonen; se Billig utskrift) får tak i disse. For at scriptet skal vite hvilken printerkø den skal legge PDF-en i, vil det settes en cookie i nettleseren. Denne settes når man forsøker å selge billetter, eller prøver å reprinte gamle ordre (med andre ord, omtrent idet man trenger den første gang).

Tilgangskontroll løses på to nivåer: Grunntilgang (som stort sett kun innebærer å kunne liste opp arrangementer og selge billetter) sjekkes i Apache-configen ved bruk av mod_auth_itk (altså med SSO og det hele); videre tilgang skjer «manuelt» i scriptene vha. ITKACL.

Lenker: Start, billig, billig, hvordan utvikle

Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2022-10-15 14:53 | Revisjon: 11 (historie, blame) | Totalt: 1886 kB | Rediger