Toteutusdokumentti. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Samankaltaiset tiedostot
Toteutus. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Toteutusdokumentti. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Toteutusdokumentti. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testaussuunnitelma. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Tanja-kälidemo

Testaussuunnitelma. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Käyttöohje. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Jos olet uusi käyttäjä, pääset ryhmän kokoonkutsujaksi rekisteröitymällä järjestelmään sivun alaosassa olevalla lomakkeella. Kirjaudu osallistujana

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Käyttöohje. Versiohistoria: versio Mari Kommenttien perusteella korjattu versio

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Suunnittelu. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ylläpitodokumentti. Oppimistavoitteiden hallintajärjestelmä harri

Meeting Plannerin käyttöohje

Vaatimusmäärittely. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Suunnittelu. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausraportti. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

UTIFLEET-VARAUSJÄRJESTELMÄ KÄYTTÄJÄN OHJE. Gospel Flight ry

Ohjelmistotuotantoprojekti

Outlook Web Access 1(7) OUTLOOK WEB ACCESS (OWA) SÄHKÖPOSTIN KÄYTTÖ

SQL Buddy JAMK Labranet Wiki

Treenitietokannan toteutusdokumentti

ARVI-järjestelmän ohje arvioinnin syöttäjälle

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

1. ASIAKKAAN OHJEET Varauksen tekeminen Käyttäjätunnuksen luominen Varauksen peruminen... 4

Matematiikan oppifoorumi Käyttöohje

Testausraportti v.1.3

Basware toimittajaportaali

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

Vianova Systems Finland Oy:n Novapoint käytön tuki

ARVI-järjestelmän ohje arvioinnin syöttäjälle

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

Tapahtumakalenteri & Jäsentietojärjestelmä Toteutus

1. Kalenterin omistajan käyttöohje

Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.

Kaislanet-käyttöohjeet

OpenOffice.org Base 3.1.0

Käyttöohje. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testaussuunnitelma. Opeapuri. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Lohtu-projekti. Testaussuunnitelma

Ylläpitodokumentti Labra

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

Webforum. Version 14.4 uudet ominaisuudet. Viimeisin päivitys:

Tikon ostolaskujen käsittely

Sisältö. 3 Yleistä 4 Toimittajaportaalin edut 5-10 Rekisteröinti Laskun teko 23 Lasku JIP. 29/05/2015 Anna-Stina Lindblad

Microsoft Outlook Web Access. Pikaohje sähköpostin peruskäyttöön

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

CLOUDBACKUP TSM varmistusohjelmiston asennus

Sähköposti ja uutisryhmät

Raporttiarkiston (RATKI) käyttöohjeet Ohjeet

RADAR - RANDOM DATA GENERATOR

Toteutusdokumentti. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteenlaitos

Visma Fivaldi -käsikirja Tehtävienhallinta- ohje käyttäjälle

Ylläpitodokumentti Mooan

Testausdokumentti. Sivu: 1 / 10. Ohjelmistotuotantoprojekti Sheeple Helsingin yliopisto. Versiohistoria

LUKKARIN KÄYTTÖOHJE Sisällys

Fingridin säätösähkötarjousohje. Vaksin käyttöohjeet

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Asiakashallinta. TaikaTapahtumat -käyttöohje

Sisällys Clerica Web-sovellusten käytön aloittaminen 2

Muuttujien määrittely

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

1 PIKAOHJE SELAA AIKOJA PALAUTE AJANVARAUS VARAUKSEN TARKASTELU VAHVISTA LÄHTÖÖN OSALLISTUMINEN...

Lohtu-projekti. Testiraportti. Versiohistoria: syklin toteutuksen testit. 1. ajo Virve

Käyttöohje. AssariXP. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

Tiedostonhallinta. Yleistä

SILMAT-INTRANET -OHJE

Skype for Business ohjelman asennus- ja käyttöohje Sisällys

EVTEK-PROJEKTORI KÄYTTÖOHJE Tekijä: Teemu Tammivaara VBP04S

Office 365 palvelujen käyttöohje Sisällys

Testausraportti. Oppimistavoitteiden hallintajärjestelmä harri

Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje

IT-ohjeita. (Diakonia-ammattikorkeakoulu oy, )

LoCCaM. LoCCaM Cam laitteiston ohjaaminen. Dimag Ky dimag.fi

Käyttöohje. HeTLi. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Käyttöohje. Labra. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Kotopro käyttäjän ohje

MOBISITE-TYÖKALUN SISÄLTÄMÄT TOIMINNOT

Testaussuunnitelma Labra

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.3.0

Sukupuu -ohjelma. Ossi Väre ( ) Joni Virtanen ( )

Asukastiedotus Visma Fivaldi

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0

Ohjelmoinnin perusteet Y Python

Tikon ostolaskujen käsittely

2 SISÄÄNKIRJAUTUMINEN SELAA AIKOJA PALAUTESIVU... 7

Nettiposti. Nettiposti käyttöohje

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

Paavo Räisänen. WampServer palvelimen asennus ja käyttö Eclipsen kanssa, sekä ensimmäinen FTP yhteys.

EKP:N HANKINTAMENETTELYJEN VERKKOPALVELU OSALLISTUMINEN HANKINTAMENETTELYIHIN

RockID-varastonhallintajärjestelmän käyttöohje. v. 1.0

Transkriptio:

Toteutusdokumentti Sahara-ryhmä Helsinki 25.8.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Sanna Keskioja Sampo Lehtinen Hanna Liedenpohja Seppo Syrjänen Asiakas Joni Salmi Johtoryhmä Juha Taina Kimmo Simola Kotisivu http://www.cs.helsinki.fi/group/sahara Versiohistoria Versio Päiväys Tehdyt muutokset 0.1 17.8.2005 Ensimmäinen versio. Tietokanta-asioita mukaan./ss 0.2 23.8.2005 Tiedostojen kuvaus./ss 0.3 24.8.2005 Sovelluksen runko. Asetustiedostojen ja muuttujien kuvaus./ss

Sisältö i 1 Johdanto 1 1.1 Ei tullut takkia - tuli housut......................... 1 1.2 Dokumentin rakenne............................ 1 1.3 Termit.................................... 1 2 Arkkitehtuuri 3 2.1 Ohjelmistoympäristö............................ 3 2.2 Valmiit komponentit............................ 3 3 Tiedostojen sijainti 4 4 Alustustiedostot 5 5 Sovelluksen rakenne 6 5.1 index.php.................................. 7 5.2 perustiedot.php............................... 7 5.3 osallistujat.php............................... 7 5.3.1 csvtuonti.php............................ 7 5.4 aikataulu.php................................ 8 5.5 Apumoduulit................................ 8 5.5.1 apu.php............................... 8 5.5.2 lukujarjestys.php.......................... 8 5.5.3 munkres-kuhn.php......................... 8 5.5.4 sessiot.php............................. 8 5.5.5 valilehdet.php............................ 8 5.5.6 yhteiset.php............................. 8 5.5.7 ylavalikko.php........................... 8 6 Algoritmit 9 6.1 Yksilötapaamiset.............................. 9 6.2 Ryhmätapaamiset.............................. 9 7 Tietokannan toteutus 11 7.1 Tietokannan abstrahointi.......................... 11

ii 7.2 Taulut.................................... 11 7.3 Indeksit................................... 13 7.4 Eheystarkistukset.............................. 13 7.5 Proseduurit ja triggerit........................... 13

1 Johdanto 1 Tanja-järjestelmän toteutusdokumentti kuvaa yksityiskohtaisesti miten järjestelmä on toteutettu. 1.1 Ei tullut takkia - tuli housut Toteutettu järjestelmä poikkeaa useassa kohdassa merkittävästi suunnitteludokumentissa esitetystä. 1.8.2005 pidettyssä kokouksessa projektiryhmä päätti, että projektin käytössä olevat resurssit ja aika eivät riitä sovelma/web Start -tyyppisen kokonaan graafisen sovelluksen tuottamiseen Javalla. Tanja-järjestelmä päätettiin toteuttaa tekniikoilla, joilla käytössä olevan ajan puitteissa on mahdollista tehdä tärkeimmät vaatimukset toteuttava sovellus ja joista projektiryhmällä oli riittävää osaamista. Asiakkaan kanssa sovittiin X.8.2005 vaatimusten uudelleenpriorisoinnista sekä toteutettavan sovelluksen ominaisuuksien supistamisesta. Tanja-järjestelmää lähdettiin toteuttamaan web-käyttöliittymällä PHP-kielellä heti 2.8.2005. Käyttöliittymän ulkoasu ja muu perustoiminta voitiin pitää vaatimusdokumentin mukaisena, vain erilaiset hiirellä maalaamiset jouduttiin korvaamaan alkeellisemmilla käyttötavoilla web-käyttöliittymän (HTML, JavaScript) rajoituksellisuuden vuoksi. Sovelluksen perusrakenteen suunnitteli Hanna vaatimusdokumentin käyttöliittymäsuunnitelmien mukaan. Tietokannan abstrahoitiin otettiin käyttöön Sepon tuntema PHP-luokkakirjasto. Yksilötapaamisaikataulun muodostusalgorimi portattiin suoraan Javalla tehdystä referenssitoteutuksesta. 1.2 Dokumentin rakenne 1.3 Termit Toteutusdokumentissa käytetyt termit. CSV, Comma Separated Values, pilkkuerotetut arvot Tiedonsiirtomuoto, jota käytetään osallistujen tietojen tuontiin leikepöydän kautta esim. Kurki-järjestelmästä. Ehdotettu aikataulu Järjestelmän muodostama aikataulu, joka perustuu kutsujan kutsujan määrittelemiin aikataulun ominaisuuksiin ja osallistujien antamiin sopivuustietoihin. Järjestelmä Tanjan ohjelmiston (asiakas ja sovelluspalvelin) sekä tietokannan muodostama toiminnallinen kokonaisuus. Kurki-järjestelmä Laitoksen kurssikirjanpitojärjestelmä.

Kutsuja Henkilö, joka haluaa tavata muita henkilöitä eli osallistujia itselleen sopivina ajankohtina. Käyttäjä Kutsuja tai osallistuja, joka käyttää järjestelmää jollain käyttöliittymällä. Lopullinen aikataulu Kutsujan hyväksymä aikataulu, joko järjestelmän alun perin ehdottama aikataulu tai kutsujan itse muokkaama aikataulu. Muokattu aikataulu Ehdotettu aikataulu, johon kutsuja on tehnyt haluamiaan muutoksia. Ohjelmisto Tanja-järjestelmän sovellukset: asiakas ja sovelluspalvelin. Osallistuja Henkilö, jonka kutsuja haluaa tavata. Osallistujan sopivuudet kutsujan määritteleminä aikoina syötetään järjestelmään. Ryhmä Kutsujan määrittelemä kokonaisuus, joka sisältää osallistujat sekä yhden tai useampia aikatauluja. Ryhmätapaaminen Ryhmän yhteinen tapaaminen, johon mahdollisimman moni ryhmän osallistujista osallistuu. Sopivuus Osallistujan tapaamisajoille annettu sopivuusarvo, "prioriteetti". Arvot ovat "Sopii hyvin", "Sopii kohtalaisesti"ja "Ei sovi". Järjestelmä käyttää myös arvoa "Ei tietoa"kuvaamaan sitä, että tietyltä osallistujalta ei ole tiedossa sopivuutta kyseiselle ajankohdalle. Sovellus Tanja-järjestelmän ohjelma. Tapaaminen Osallistujalle tai ryhmätapaamiselle valittu aika. Tapaamisen kesto Kutsujan valitsema yhden tapaamisen kesto. Vaihtoehdot ovat 10, 20, 15, 30, 45, 60 tai 120 minuuttia. Tapaamisen tyyppi Yhteen aikatauluun kuuluvien tapaamisten tyyppi. Aikataulu voi olla tyypiltään ryhmätapaaminen tai yksilötapaaminen. Tarjottu aika Kutsujan määrittelemä yksittäinen ajankohta (aloitus- ja lopetusaika), jolloin hän haluaa tavata ryhmänsä osallistujia. Tarjottu aika sijoittuu tiettyihin viikonpäiviin tiettynä aikataulun määrittelemänä viikkojaksona. Vanhentunut aikataulu Aikataulu, jonka viikkojakso on jo päättynyt, mutta jota ei vielä ole poistettu järjestelmästä. Viikkojakso Kutsujan kalenterista valitsemat viikot, joiden aikana ryhmän tietty aikataulu on voimassa. Yksilötapaaminen Tapaaminen, jossa kutsuja tapaa henkilökohtaisesti yhden osallistujan. 2

2 Arkkitehtuuri 3 Tanja on yksinkertainen web-sovellus, jossa WWW-selain keskustelee toteutetun PHPsovelluksen kanssa. Sovellus tallettaa tarvittavat tiedot SQL-tietokantaan. Osa Tanjan käyttöliittymästä on toteuttettu yksinkertaisilla JavaScript-tekniikoilla. 2.1 Ohjelmistoympäristö Tanja on rakennettu seuraavien alustakomponenttien avulla: Ohjelmisto Versio Kuvaus Apache Apache/1.3.33 WWW-palvelin PHP 4.3.11 WWW-sovelluskieli PostgreSQL 7.4.7 Tietokantapalvelin Tanjaa on testattu seuraavien WWW-selaimien kanssa: Selain Versio Mozilla 1.6 Mozilla Firefox 1.0.4 Internet Explorer X 2.2 Valmiit komponentit Tanja-järjestelmä käyttää seuraavia OpenSource-komponentteja. Komponentti Versio URL Munkres-Kuhnalgoritmi 0.11 http://www.spatial.maine.edu/~kostas/ dev/soft/munkres.htm Tietokantataulujen abstrahointi 1.0 http://baglan.web.tr/personal/articles/ dbhanfler.html Työkaluopasteet (tooltip) 3.33 http://www.walterzorn.com/scripts/wz_ tooltip.zip

3 Tiedostojen sijainti 4 Ohjelmiston käyttämät tiedostot: Tiedosto Tarkoitus.htaccess PHP-ohjelmien käyttöönotto WWW-palvelimessa aikataulu.php Aikataulujen hallinta asetukset/ Ohjelman asetustiedostot (PHP-muodossa) asetukset/aikataulut.php Aikataulujen oletusasetukset asetukset/csv.php CSV-tuonnin oletusasetukset asetukset/tietokantayhteys.php Tietokantayhteyden asetukset asetukset/yleiset.php Mm. kutsujan sähköpostiosoitteen oletusasetukset csvtuonti.php CSV-muotoisen tiedon tuonti index.html Oletussivu, joka ohjaa index.php:hen index.php Sisäänkirjautumissivu kuvat/ Ohjelmiston käyttämät kuvat ja ikonit moduulit/ Apumoduulit. moduulit/apu.js JavaScript-kirjastofunktiot moduulit/apu.php PHP-kirjastofunktiot moduulit/lukujarjestys.php Tarjottujen aikojen ja sopivuuksien syötön kirjastofunktiot moduulit/munkres-kuhn.php Munkres-Kuhn-algoritmin PHP-toteutus moduulit/valilehdet.php Käyttöliittymän välilehtien toteutus moduulit/wz_tooltip.js Käyttöliittymän työkaluavusteiden (tooltip) JavaScripttoteutus moduulit/yhteiset.php Käyttöliittymän kirjastofunktiot moduulit/ylavalikko.php Käyttöliittymän ryhmä- ja aikatauluvalikkojen toteutus osallistujat.php Osallistujien hallinta perustiedot.php Aikataulun perustietojen hallinta rekisteroidy.php Rekisteröinti järjestelmään!testi/ Testikomponentteja tietokanta/ Tietokannan komponentit tietokanta/db.abstraction.php Käytettävän SQL-tietokannan abstrahointi tietokanta/db.handle.php Tietokantataulujen PHP-luokkien toteutus tietokanta/tietokanta.php Tanja-sovelluksen käyttämien taululuokkien toteutus tyylit/ Ulkoasun CSS-tyylitiedostot

4 Alustustiedostot 5 painoarvot. Sopivuudet talle painotetaan laskenta-algoritm Oletuksena käytetään Kurkiasetukset/tietokantayhteys.php tokannan nimi (dbname), T kantakäyttäjä (user) sekä tie muuttamassa tietokannan mu säännöllinen lauseke (Perl) teen pitää olla muodollisesti Tanjan oletusarvoja muutetaan seuraavilla muuttujilla seuraavissa tiedostoissa. Asetustiedostot ovat suoraan sovellukseen mukaanotettavaa (include) PHP-koodia, joten niiden muokkaamisessa on oltava tarkkana. Tiedosto Muuttuja Tarkoitus asetukset/aikataulut.php $TAPAAMISPITUUDET Aikataulujen tapaamispituuk asetukset/aikataulut.php $SOPIVUUSPAINOT Aikataulujen laskennassa k sovi, 2=sopii kohtalaisesti, taa mielekkäitä aikatauluja. asetukset/csv.php $CSVEROTIN CSV-tuonnin erotinmerkin o asetukset/csv.php $CSVKENTAT CSV-tuonnissa käytettävien $conn_string Tietokantayhteyden asetuks Asennettaessa Tanja uuteen asetukset/yleiset.php $salasana Salasanan kelvollisuustarkis nen lauseke (Perl). asetukset/yleiset.php $kutsujansahkopostiosoite Kutsujan sähköpostiosoitte asetukset/yleiset.php $kutsuttavansahkopostiosoite Kutsuttavan sähköpostiosoit säännöllinen lauseke (Perl). asetukset/yleiset.php $salasana Salasanan kelvollisuustarkis nen lauseke (Perl). asetukset/yleiset.php $salaisuuttarekisteroinninhaasteeseen Rekisteröinnissä käytettävä no. asetukset/yleiset.php $tanja_session_savepath PHP-sessioavaimien talletu ved_sessions ;

5 Sovelluksen rakenne 6 Pääsivut (voivat toimia itsenäisinä php-sivuina, käyttäjä näkee nämä) Sivu index.php perustiedot.php osallistujat.php aikataulu.php cvstuonti.php rekisteroidy.php demo.php index.html Kuvaus Aloitussivu: rekisteröityminen, sisäänkirjautuminen, salasanan tilaus Perustietojen ja tarjottujen aikojen syöttölomake Osallistujien ja sopivuuksien syöttölomake Aikataulun muokkauslomake CSV-muotoisten osallistujatietojen syöttölomake Rekisteröinnin vahvistussivu Tanja-demo/käyttöohje HTML meta refresh -ohjaus index.php-sivulle Sivujen yhteiset toiminto- ja ulkoasumoduulit (include-tiedostot) Tiedoston nimi yhteiset.php ylavalikko.php valilehdet.php lukujarjestys.php apu.php munkres-kuhn.php wz_tooltip.js apu.js SESSION-muuttujissa välitetään: - kutsujan etunimi, sukunimi, sähköposti, salasana - käsiteltävän ryhmän ja aikataulun id POST-parametreinä välitetään: - lähetetyn lomakkeen tallennettavat tiedot - ohjaustietoja: valilehti, toiminto, seuraavatoiminto GET-parametrejä ei käytetä. Usealla sivulla tarvittavat toiminnot on koottu yhteiset.php:hen Kuvaus Suurin osa sivujen toimintalogiikasta ja sivujen yhteisten ylä- ja alaosan HTML-koodit. Yläosan ryhmä- ja aikatauluvalikoiden HTML-koodi. Välilehtipalkin ja Kirjaudu ulos-painikkeen HTML-koodi. Tarjotut ajat- tai Sopivuudet-viikkonäkymän tulostava koodi. Sekalaisia apufunktioita esim. arvojen tarkistukseen. Aikataulun sopivuuksien perusteella laskeva algoritmi. Aikataulun muokkauksessa käytetyt tooltipit. Sekalaisia javascript-apufunktioita. valitsetoiminto() ohjaa oikeaan toimintoon parametrin perusteella Sivuilla perustiedot.php, osallistujat.php ja aikataulu.php kaikki lomake-elementit ovat samassa lomakkeessa. Mikä tahansa toiminto siis aina tallentaa päälomakkeen (huono nimi? siis se välilehtien alapuoli) tiedot. Tallennus tapahtuu myös esim. ryhmän vaihtami-

7 sessa valikosta ja toiselle välilehdelle siirtymisestä. Tällöin tallennus tapahtuu näin: lomakkeen submit post: toiminto=päälomakkeen tallennus seuraavatoiminto=vaihda_ryhmä ->valitsetoiminto()->tallennaperustiedot() (manipuloidaan postia)post:toiminto=seuraavatoiminto ->valisetoiminto()->vaihdaryhma() ->tulostapaasivu() (päivitetty sivu tulostuu) Samalla lomakkeen lähetyksellä tehdään siis kaksi eri tallennusta ja niiden jälkeen vasta näytetään päivitetty sivu. valitsetoiminto() sisältää: Toiminto Käsittelevä funktio Kuvaus kirjaudu_ulos kirjauduulos() vaihda_ryhma vaihdaryhma() vaihda_aikataulu vaihdaaikataulu() uusi_ryhma uusiryhma() uusi_aikataulu uusiaikataulu() poista_ryhma poistaryhma() poista_aikataulu poistaaikataulu() tallenna_perustiedot tallennaperustiedot() tallenna_osallistujan_tiedot tallennaosallistujantiedot() poista_osallistuja poistaosallistuja() tallenna_kutsujan_tiedot tallennakutsujantiedot() 5.1 index.php 5.2 perustiedot.php 5.3 osallistujat.php 5.3.1 csvtuonti.php Globaalit muuttujat: $CSVEROTIN tiedostosta asetukset/csv.php: CSV-tiedon erotinmerkki $CSVKENTAT tiedostosta asetukset/csv.php: CSV-tiedossa olevien kenttien valinta. $taulukahva tiedostosta moduulit/yhteiset.php: Tietokantataulujen oliot taulukossa. Osallistujatietojen tuonti CSV-muodossa leikepöydän kautta esim. Kurki-järjestelmästä tapahtuu vaiheittain. Aluksi CSV-muotoinen tieto liitetään suureen tekstikenttään, valitaan käytettävät erotin-

merkit sekä mistä kohtaa CSV-tietutetta tulkitaan etunimi, sukunimi sekä sähköpostiosoite. Tämän lomakkeen tekee funktio aloitus(). Toisessa vaiheessa funktio siirralomakkeelle() tarkistaa, että on annettu jotain tietoja, valitsee käytettävät erotinmerkit ja kentät ja tulkitsee tiedon osallistujalistaksi lomakkeelle. Rivit, joilta saadaan tunnistettua halutusta sarakkeesta sähköpostiosoite, valitaan jatkokäsittelyyn laittamalla valintarasti sarakkeelle Valitse. Muut rivit jätetään rastitta. Etu- ja sukunimitietoja ei validoida eikä myöskään estetä saman sarakenumeron antamista jokaiseen kenttään. Tässä vaiheessa tietoihin voi vielä tehdä muokkauksia, joiden jälkeen siirrytään kolmanteen vaiheeseen. Jos annettu sähköpostiosoite on jo järjestelmässä, annetaan siitä ilmoitus. Jos annettu sähköpostiosoite on jo osallistujana ryhmässä, annetaan siitä ilmoitus. Muuten lisätään osallistuja ryhmään. Jos valitaan jo olemassaolevan sähköpostiosoitteen talletus, päivitetään nimitiedot annettujen tietojen mukaan. Funktio tallennavalitut() tallettaa tietokantaan edellisellä lomakkeella annetut käyttäjät. Jos sähköpostiosoite on virheellinen, tarjotaan mahdollisuus palata takaisin edelliseen vaiheeseen tekemään korjaukset. Muuten ilmoitetaan mitä tietokantaan talletettiin. 8 5.4 aikataulu.php Aikataulujen laskenta-algoritmit on kuvattu luvussa 6. function varaaaika($aid,$aika,$kid) function muodostaaikataulu($aid,$tyyppi) function tulostasisalto() 5.5 Apumoduulit 5.5.1 apu.php 5.5.2 lukujarjestys.php 5.5.3 munkres-kuhn.php 5.5.4 sessiot.php 5.5.5 valilehdet.php 5.5.6 yhteiset.php 5.5.7 ylavalikko.php

6 Algoritmit 9 Sovelluksen mielenkiintoisimmat algorimit liittyvät aikataulujen reiluun muodostamiseen osallistujen antamien sopivuuksien perusteella. 6.1 Yksilötapaamiset Yksilötapaamista varten etsitään kullekin osallistujalle mahdollisimman toivottu tapaamisaika. Yleisessä tapauksessa ongelma palautuu klassiseen kaksijakoisen graafin maksimisovitukseen (luokkaa O(n!)), joka ratkaistaan perinteisesti Munkres-Kuhn-algoritmilla (ns. Unkarilainen algoritmi) ajassa O(n**3). Sovelluksessa käytetään Konstantinos A. Nedas:n [VIITE] Java-toteutuksesta http:// www.spatial.maine.edu/~kostas/dev/soft/munkres.htm tehtyä suoraa PHP-porttausta. PHP-modulin munkres-kuhn.php yksikkötestaus tehtiin vertaamalla kymmenen testimatriisin sovitusta referenssinä pidetyn Java-version tuottamaan sovitukseen. Munkres-Kuhn-algoritmi käsittelee matriiseita [0..n][0..m], joten sovelluksen matriisi [tarjotut ajat][osallistujat] piti muuntaa algoritmin haluamaan muotoon. Tämä tehdään funktiossa muodostaaikataulu(aid,tyyppi), joka muodostaa aikataulun ja tallettaa sen tietokantaan. Koska Munkres-Kuhn-algoritmi yksinkertaisesti maksimoi valittujen tarjottu aika - osallistuja -matriisin kokonaissumman, pitää sovelluksen antamia sopivuusarvoja painottaa vastaamaan paremmin haluttua tulosta: ei sovi -arvoille annetaan painoarvo -100, jotta niitä ei varmasti anneta kenellekään. Ei tietoa -arvoilla annetaan painoarvo 10, jotta niitä voidaan käyttää jos muita sopivuuksia ei ole tiedossa. Sopii kohtalaisesti ja sopii hyvin -arvoille annetaan painoarvot 100 ja 150. Osallistujille, joille ei ole tiedossa sopivuustietoja annetaan painoarvoksi -10, jolloin heille jaetaan ne ajat, jotka muille eivät kelpaa. Lisäksi jokaisen tarjotun ajan painoarvoon lisätään pieni korjauskerroin log(aika)*0.01, jotta algoritmi suosii tasatilanteessa aikaisempia tapaamisaikoja. Aika ilmoitetaan sekunteina maanantain keskiyöstä, joten logaritmi sijoittuu välille [0,X] ja korjauskerrooin siten välille [0,X]; Painoarvoja voi muuttaa järjestelmän konfiguraatiotiedostossa asetukset/aikataulu.php. 6.2 Ryhmätapaamiset Sopivimman ajan löytämisen ryhmätapaamiseen on triviaali ongelma, jossa riitää valita halutaanko aika, joka sopii mahdollisimman monelle edes jotenkin vaiko aika, jota mahdollisimman harva on ilmoittanut ei-sopivaksi. Ero näiden välillä tulee siitä miten tulkitaan aikoja, joista ei ole tarjolla sopivuustietoa: voidaan saada useammalle sopiva aika, jos voidaan tulkita ei tietoa -sopivuus jonkinlaiseksi sopivuudeksi sen sijaan, että löydetään aika joka sopii varmasti mahdollisimman monelle.

Valinta näiden laskentatapojen välillä tehdään valitsemalla konfiguraatiotiedostoon asetukset/aikat ei tietoa -sopivuudelle nollaa suurempi painokerroin (minimoidaan ei sovi -sopivuuksien määrä) tai painokerroin nolla (maksimoidaan vain aidot tiedetyt sopivuudet). 10

7 Tietokannan toteutus 11 -tietokantakaaviot: tähän kuvat tauluista ja triggereistä Tietokannan luovat SQL-komennot ovat Tanjan asennuspaketissa tiedostossa tanja-init.sql. 7.1 Tietokannan abstrahointi Tietokantataulujen operaatiot on abstrahoitu Baglan Dosmagambetovin [VIITE] sivulla http://baglan.web.tr/personal/articles/dbhanfler.html esittelemällä tekniikalla. Tauluja käsitellään PHP:n luokkamuuttujien ilmentyminä, jolloin rutiiniioperaatioiden tekemiseen ei tarvita sovellukseen kirjoitettavaa SQL-koodia. Alkuperäinen db.abstraction.php oli toteuttu MySQL-ohjelmistolle, mutta siitä saatiin käyttöön Sepon aikaisemmin PostgreSQL:lle porttaama versio. Myös pääluokkaa db.handle.php oli kehitetty huomattavasti yo. sivun esittämästä versiosta (mm. avainkentän nimien korvaaminen perittävissä luokissa, useapien avainkenttien käyttö). Tietokantaluokkien PHP-tiedostot ovat hakemistossa tietokanta. Koska tietokantaluokat otettiin projektin käyttöön ulkopuolisena valmiina komponenttina, niitä ei ole projektin puitteissa erikseen testattu. 7.2 Taulut Taulut on nimetty yksikkömuotoon (KAYTTAJA, RYHMA). Merkintä =tbl:f tarkoittaa eheystarkistusta taulun tbl kentän f kanssa eli että tämä kenttä voi saada vain arvoja, jotka esiintyvät taulun tbl kentässä f. Toteutetaan CONSTRAINTmääreellä kentän luontivaiheessa: kid int constraint ryhma_kayttaja_id_check references kayttaja(kid) Tietokannan tietojen vanhenemiseen käytettävien aikaleimojen Date-tyyppi toteutetaan PostgreSQL:n timestamp with time zone -tyypillä. Varattavat aikojen alkupisteet lasketaan sekunteina maanantaista klo 00 lähtien.

Taulu KAYTTAJA Käyttäjien tiedot kid serial not Tietokannan generoima juokseva yksikäsitteinen null tunniste. Asetetaan halutuksi näin: select setval( kayttaja_kid_seq,372). etunimi varchar sukunimi varchar sposoite varchar Sähköpostiosoite. salasana varchar uusisalasana varchar Asetettu, jos salasanaa ollaan vaihtamassa. uusisposoite varchar Asetettu, jos käyttäjä on rekisteröitymässä. viimkaytto date Viimeisin käyttöaika. Päivitetään kun käyttäjä loggaa sisälle (Tanjan koodissa), käyttäjän tiedot, ryhmäjäsenyydet tai sopivuudet muuttuvat (triggereillä?). Taulu RYHMA Ryhmien tiedot rid serial Juokseva tunniste. rnimi varchar Ryhmän nimi. kid =kayttaja:kid Ryhmän kutsuja. viimkaytto date Viimeisin käyttöaika. Päivittyy triggerillä? kun ryhmän aikatauluja päivitetään. Taulu OSALLISTUMINEN Ryhmiin osallistuminen kid =kayttaja:kid Käyttäjä kid osallistuu ryhmään rid. rid =ryhma:rid Taulu AIKATAULU Aikataulujen tiedot aid serial Juokseva tunniste. rid =ryhma:rid Ryhmä, johon aikataulu liittyy. animi varchar Aikataulun nimi. alkupvm date Viikkojakson alku. loppupvm date Viikkojakson loppu. tap_kesto integer Minuutteja. tap_tyyppi integer 1=Yksilötapaaminen, 2=Ryhmätapaaminen. tila integer Aikataulun tila: 0=laskematta, 1=laskettu. ryhmatap_aika integer Ryhmätapaamiselle laskettu aika. viimlaskettu date Viimeinen laskuaika. viimkaytto date Viimeinen käyttöaika. Päivittyy triggerillä, kun aikataulun tietoja, tarjottuja aikoja tai sopivuuksia muutetaan. Taulu TARJOTTU Tarjotut ajat aid =aikataulu:aid Aikataulu, johon tarjotut ajat kuuluvat. alkuaika integer Tarjotun ajan alku sekunteina maanantaista klo 0. kid integer Aika varattu ko. käyttäjälle. Saa olla myös 0 tai NULL, joten tätä ei varmisteta eheystarkistuksella. 12

Taulu SOPIVUUS Sopivuudet aid =aikataulu:aid Aikataulu, jonka sopivuuksia käyttäjälle kid kerrotaan. kid =kayttaja:kid sopivuus int Sopivuusarvo 0-3. 0=ei tietoa, 1=ei sovi, 2=sopii kohtalaisesti, 3=sopii hyvin. alkuaika date Sopivuus alkaa tähän aikaan. 13 7.3 Indeksit SERIAL-tyyppisille avainkentille syntyvät indeksit automaattisesti. Lisäksi on luotu seuraavat indeksit:!=tee! Indeksi Taulu Kentät kayttaja_sposoite kayttaja sposoite!osallistuminen_rid_kid osallistuminen rid, kid!sopivuus_aid_kid sopivuus aid, kid!tarjottu_aid tarjottu aid 7.4 Eheystarkistukset Tietokannan eheyttä valvovat seuraavat constraint-määrittelyt: Tarkistus Taulu.kenttä Taulu(kenttä) ryhma_kid_check ryhma.rid kayttaja(kid) aikataulu_ryhma_rid_check aikataulu.rid ryhma(rid) osallistuminen_kayttaja_kid_check osallistuminen.kid kayttaja(kid) osallistuminen_ryhma_rid_check osallistuminen.rid ryhma(rid) sopivuus_aikataulu_aid_check sopivuus.aid aikataulu(aid) tarjottu_aikataulu_aid_check tarjottu.aid aikataulu(aid) sopivuus_kayttaja_kid_check sopivuus.kid kayttaja(kid) 7.5 Proseduurit ja triggerit Tietokantaan on määritelty seuraavat PLPSQL-proseduurit.

14 Nimi touch() touchuser() touchtt() Lähdetaulut Kohdetaulut Tarkoitus kayttaja, kayttaja, ryhma, ryhma, aikataulu aikataulu tarjottu, sopivuus tarjottu, aikataulu kayttaja aikataulu Virkistää muutetun rivin viimkaytto-kenttää, kun rivin kenttiä/tietoja päivitetään. Virkistää käyttäjän viimkaytto-kenttää kun hänelle annetaan tapaamisaika tai hänelle määritellään sopivuuksia. ENTÄ RYHMÄTAPAA- MISAJAN LASKENNAN TRIGGERI? Nollaa aikataulun tila-kentän tilaan ei-laskettu, kun aikataulun tarjottuja aikoja tai sopivuuksia päivitetään. ENTÄ JOS RYHMÄN JÄSENET MUUTTUVAT?