Toteutusdokumentti. Aija. Helsinki 1.9.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteenlaitos



Samankaltaiset tiedostot
SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Tietokannat II -kurssin harjoitustyö

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

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

RATKI 1.0 Käyttäjän ohje

CSE-A1200 Tietokannat

Tietokannat II -kurssin harjoitustyö

Lunastuspoistajat AJONEUVOJEN REKISTERÖINTI

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Asko Ikävalko, k TP02S-D. Ohjelmointi (C-kieli) Projektityö. Työn valvoja: Olli Hämäläinen

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Käsikirjan paperiversiota ei enää ylläpidetä ohjeen päivämäärän jälkeen. Viimeisimmät versiot ohjeista löydät ohjelman Help-ruudulta.

SQL - STRUCTURED QUERY LANGUAGE

Opettajan pikaopas Opintojaksopalaute-järjestelmään

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

OPETTAJATIEDONKERUU 2013

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

GALERIE EXHIBITIONS (13) 1 2 EXHIBITIONS 2

HELIA 1 (11) Outi Virkki Tiedonhallinta

5. HelloWorld-ohjelma 5.1

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Ohjeet asiakirjan lisäämiseen arkistoon

Testaussuunnitelma NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Autentikoivan lähtevän postin palvelimen asetukset

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

Ohjelmoinnin perusteet Y Python

Käyttötapauksen nimi Lukija: pääsivu Osallistujat Lukija Tuloehdot Käyttäjä on avannut sivuston pääsivun Kuvaus Ruudulle tulostuvat kirjoittajat ja

Postitussuunnitelman hyväksyminen

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

TIETOJENKÄSITTELY/TIETOKANTA Tehtävä C

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

Toimittajaportaalin pikaohje

Solve ja Nordean verkkopankki

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Toimittajaportaalin pikaohje

Sisäänkirjautuminen Tallennus/raportit (YAP) Tallennusohjelma

Sisäänkirjaus Uloskirjaus. Yritystieto

Ohjelmoinnin perusteet Y Python

Omapalvelu. Omapalvelu - ohje Päivityspaketti 1/ Tieto Corporation

Tarva LC (Level Crossing) pikaohje Harri Peltola & Mikko Virkkunen

17 BUDJETOINTI. Asiakaskohtainen Budjetti Ylläpito-ohjelma. Dafo Versio 10 BUDJETOINTI. Käyttöohje. BudgCust Yleistä

TIETOKANNAT JOHDANTO

Yrityksen sisäinen tunnus Henkilönumero tai muu yrityskohtainen tunniste, mikäli tieto on tallennettu verkkopalveluun.

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden

Sisältö. 22. Taulukot. Yleistä. Yleistä

Uuden Peda.netin käyttöönotto

Käyttöohje. Visy Access Net UPM

Uutiskirjesovelluksen käyttöohje

Opetuksen suunnittelu

Tuotteiden tiedot: Lisää uuden tuotteen tiedot. Muuta tai poista tuotteen tiedot. Selaa kaikkien tuotteiden tietoja.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Asiakastietojen tuominen toisesta tietokannasta etaika-ohjelmistoon. Kuinka yhdistän tietoja eri asiakastietokantojen välillä

Omapalvelu. Omapalvelu - ohje Päivityspaketti 3/ Tieto Corporation

Java-kielen perusteet

OpenOffice.org Base 3.1.0

Action Request System

Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Sisältö. 2. Taulukot. Yleistä. Yleistä

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

Kortinhaltijat joilla on maksukeskeytys Maksuryhmään liitettyjen kortinhaltijoiden lukumäärä, joiden maksut ovat tilapäisesti keskeytetty.

Contact Form 7 -lomakkeen yhdistäminen Timeline Manageriin

SQL Buddy JAMK Labranet Wiki

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Diacor Turku extranet

Ylläpitoalue - Etusivu

1 Visma L7 päivitysaineiston nouto

Ohjeita uuden Sikavan käyttöön lääkekirjanpidossa

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

Tik Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu KÄYTTÖOHJE. LiKe Liiketoiminnan kehityksen tukiprojekti

Hakulomakkeen täyttöohjeet

CSV - XML ohjelman käyttöohje

Java ja tietokannan käsittely (JDBC)

14. Hyvä ohjelmointitapa 14.1

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.

Ylläpitopalvelu. Tietuekuvaus. Tietuekuvaus 1 (8) Ylläpitopalvelu. Julkinen - Public

HumakPro-uudistuksia ja -parannuksia / kevät 2013:

Liitokset - haut useaan tauluun

Tarva MT (Maantie) pikaohje Harri Peltola & Mikko Virkkunen

A TIETORAKENTEET JA ALGORITMIT

Käyttötapauksen nimi Lukija: pääsivu

5. HelloWorld-ohjelma 5.1

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

13. Hyvä ohjelmointitapa (osa 1) 13.1

OPETTAJATIEDONKERUU 2013

Webmailin käyttöohje. Ohjeen sisältö. Sähköpostin peruskäyttö. Lomavastaajan asettaminen sähköpostiin. Sähköpostin salasanan vaihtaminen

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Harjoitustyö: virtuaalikone

Luento 5. Timo Savola. 28. huhtikuuta 2006

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

1. Omat operaatiot 1.1

Transkriptio:

Toteutusdokumentti Aija Helsinki 1.9.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteenlaitos

Sisältö 1. Johdanto...3 2. SQL -lauseet...3 3. Ajastettutoiminta - backrun.php...3 4. Tietokantakomponentti...3 5. Kalenterikomponentti...4 5.1 Calendar.php...5 5.2 Book.php...5 5.3 Calendar.js...5 6. Monikielisyyden tuki...6 7. Reunalistakomponentti...6 7.1 sidepane.php-komponentin käyttö...7 7.2 Palvelut...7 7.2.1 sidepanelink($text, $indent = 0, $state = 0, $url = "", $selected, $group_id, $open)...7 7.2.2 sidepane($id, $lang, $urlparametres)...8 8. Reunalistakomponentin sovelluslogiikka...9 9. Session.php...10 10 Aikojenjakoalgoritmi matchingalgorithm.php...10 10.1 Palvelut...11 10.2 Toiminnallisuus...11 11. Ryhmä group.php...12 11.1 Yleiskuvaus sovelluslogiikasta...12 11.2 SQL-lauseet...13 12 Osallistuja - member.php...14 12.1 Osajärjestelmän Sovelluslogiikka...14 12.2 SQL Kyselyt...16 13 csv jäsentäjä csv.php...16 13.1 Toiminnallisuus...18

1. Johdanto Tämä dokumentti on tarkoitettu täydentämään suunnitteludokumenttia. Tässä kerrotaan mitä merkittäviä poikkeuksia suunnitelmasta tehtiin toteutusvaiheen aikana. Suunniteludokumentista löytyi myös selkeitä painovirheitä. Tietokannan taulujen kuva (s.54) on väärin muodostettu. Siitä puuttuvat taulut Calendar_History, Page_History ja Group_History. Nämä taulut on kuitenkin kuvattu tietokannan luonti kappaleessa (s74). Page-History -taulun luontilauseessa viiteavain viittaa Ohtu_users tauluun. Viittaus pitäisi tietenkin olla Users tauluun. 2. SQL -lauseet Järjestelmän tietokantakyselyitä jouduttiin muokkaamaan monessa kohdassa ohjelmakoodia. Syynä tähän oli ryhmän vähäinen kokemus Postgre -tietokannasta. Suunnitteludokumentissa esiintyvät kyselyt ovat määritellyn mukaiset, ja noudattavat ANSI SQL -standardia. Standardissa oli kuitenkin tulkinnan varaa kuinka kyselyn muodostaa, esimerkiksi mikäli sarakkeiden nimet uudelleennimetään SQL-kyselyssä, pitää ne nimetä käyttämällä AS-prefiksiä, esimerkiksi "SELECT Name AS Organizer...". AS -prefiksi on standardin mukaan valinnainen, mutta testaus vaiheessa osoittautui, että Posgressä prefiksi vaaditaan jotta kysely toimisi. Ryhmämme siis joutui muokkaamaan käytettävät kyselyt uudestaan. Uudet kyselyt on nähtävissä ohjelmakoodissa. 3. Ajastettutoiminta - backrun.php Backrun.php toteutettiin seuraavin muutoksin: Ylläpitäjän sähköpostiosoite noudetaan Codes taulun monikosta, jossa Collection -kentän arvo on ADMINISTRATOR ja Value -kentän arvo on EMAIL. Jos suorituksen aikana tapahtuu jokin fataali virhetilanne, skriptin suoritus päättyy ja virhe raportoidaan kuten suunnitteludokumentissa on mainittu. 4. Tietokantakomponentti Tietokantakomponenttin lisättiin seuraava vakio: Vakion nimi Tietotyyppi Tietokannan objekti DB_PORT int Tietokantayhteyden porttinumero

Vakio lisättiin, koska porttinumeron käyttö on välttämätön tulevassa ohjelman ympärisössä. Tietokantakomponentin toiminnallisuutta on muutettu toteutuksessa siten, että dbgetrows-funktio palauttaa tulosjoukon sarakkeiden nimet isolla alkukirjaimella ja muuten pienillä kirjaimilla. Esimerkiksi sarakkeen nimi "EmailOsoite" muutetaan muotoon "Emailosoite" ellei sitä ole lueteltu funktiossa. Tämä muutos johtuu siitä, että PostgreSQL palauttaa sarakkeiden nimet aina pienillä kirjaimilla. Jotta ohjelmakoodissa olevia sarakkeiden nimiä ei jouduta muuttamaan, on tarvittava muutos tehty dbgetrows-funktiossa. Eräiden sarakkeiden nimet ovat joko kokonaan tai osittain isoilla kirjaimilla, kuten ID ja CalendarID. Tällaiset sarakkeet on lueteltu funktiossa ja ne palautetaan alkuperäisessä muodossaan. Toinen vaihtoehto on käyttää joko kokonaan isoja tai pieniä kirjaimia ohjelmakoodissa ja muuttaa funktiossa sarakkeiden nimet vastaavasti. 5. Kalenterikomponentti Kalenterikomponentin parametreista poistettiin start. Kalenterin sisälle lisättiin html- lomake, jossa on piilokenttänä tieto siitä mistä paivästäa alkaen kalenteri tulostuu. Tämä perusteltiin sillä, että muutoksen jälkeen osajärjestelmän, johon kalenteri sijoitetaan, ei tarvitse välittää tätä tietoa parametrina kalenterikomponentille. Kalenterille lisättiin seuraavat parametrit: Parametri Tietotyyppi Pakollinen Kuvaus groupid int Kyllä Ryhmän tunnusnumero url String Ei Oletusarvoisesti NULL, sivu parametreineen jota kalenteri kutsuu kalenteria selailtaessa. Kalenterin toimintalogiikka jaettiin kolmeen erilliseen osaan calendar.php, book.php ja calendar.js. Calendar.php huolehtii kalenterin tulostuksesta ja selailusta. Book.php huolehtii valittujen viikkojen poistosta ja lisäämisestä tietokantaan. Kalenterin viikkojen merkitseminen toteutettiin calendar.js JavaScriptillä. Kalenterin tiedot välitetään piilokentissä book.php:lle. Esimerkki kutsu: showcalendar($id,$groupid,true, timetable.php );

5.1 Calendar.php Toimintalogiikka on seuraava: Etsi POST-muuttujasta kalenterin aloitus päiväys. Jos aloituspäiväys löytyy POST -muuttujasta. Jos se on sallittu arvo tallenna se aloituspäiväykseksi. Muutoin aseta kuluva päivä aloitus päiväykseksi. Tulosta kalenteri käyttäen localtext() -funktiota merkkijonojen hakuun tietokannasta. Viikkojen valinta painikkeet kutsuvat calendar.js skriptiä. Viikkojen valintapainikkeet käynnistävät book.php skriptin. 5.2 Book.php Toimintalogiikka on seuraava: Ota käyttöön db.php kompnentin palvelut. Avaa tietokantayhteys Jos tietokantayhteys on auki avaa tietokanta. Jos tietokanta on auki Hae POST-muuttujasta kalenterin tallennukseen tarvittavat tiedot. Raportoi virhe jos tiedot eivät ole sallitussa muodossa. Mikäli virheitä ei ole raportoitu, luo kyselyt. Mikäli kysely on luotu suorita kysely. Muutoin suoritus päättyy. Muutoin suoritus päättyy. 5.3 Calendar.js Tämä tarjoaa markweek() -palvelun. markweek() saa seuraavat pakolliset parametrit: Parametri Tietotyyppi Kuvaus element String Elementin joka merkataan. week int Viikko jota merkkaus koskee. year int Vuosi jota merkkaus koskee. Toimintalogiikka on seuraava: Tarkista calendarid -elementin arvo. Jos arvo on 0 lähetä html-sivun lomake, joka tallentaa aikataulun tietokantaan.

Muuten Vaihda parametrina saadun viikon jokaisen solun -elementin class attribuutin arvo. Jos arvo on bgchosenday Vaihda arvoksi bgday ja muuta calendaraction -elementin arvoksi DELETE Jos arvo on bgday Vaihda arvoksi bgchosenday ja muuta calendaraction -elementin arvoksi INSERT Aseta calendarweek -elementin arvoksi parametrina saatu viikko. Aseta calendaryear -elementin arvoksi parametrina saatu vuosi. Esimerkki kutsu: markweek('cell_44_',44,2005). 6. Monikielisyyden tuki Jos tietokannassa ei ole tarvittavaa tekstiä, palauttaa localetext-funktio arvon <span class="missingtext">missing</span>. Mikäli lokalisoitua tekstiä käytetään esimerkiksi inputkentän arvona, pitää teksti tulostaa käyttämällä PHP:n strip_tags-funktiota, esimerkiksi <input value="<?php echo strip_tags(localetext($lang, "ESIM"))?>">. Tällöin kentän arvoksi asetetaan pelkkä "missing"-sana. 7. Reunalistakomponentti Reunalistakomponentin avulla näytetään käyttäjälle linkkeinä erilliset sivut, joilta löytyvät järjestelmän käytettävät toiminnot. Komponentti tulostetaan käyttöliittymään sivun vasempaan laitaan. Reunalista on puurakenteinen ja käyttäjä voi halutessaan sulkea ja uudelleen avata rakenteen osia. Oletusarvoisesti puurakenne on auki. Reunalista helpottaa käyttäjän navigointia järjestelmässä sekä auttaa hahmottamaan järjestelmän kokonaisuutta. Reunalista kertoo myös käyttäjän tämän hetkisen sijaintisivun järjestelmässä. Komponentin toiminta on kuvattu alla olevalla pseudokoodilla. Sisällytä bl_sidepane-toimintalogiikka Sidepane-funktio alkaa Tarkista kutsuvan osajärjestelmän antamat parametrit Selvitä kutsuvan osajarestelman url Tulosta ruudulle järjestelmän otsikko

Tulosta ruudulle käyttäjän ryhmät Jos puurakenne on auki: Tulosta ruudulle ryhmän aikataulu-, osallistuja- sekä viestin lähetyslinkit Muuten: tulosta ruudulle vain ryhmän nimi Jos käyttäjä on järjestäjä Tulosta ruudulle linkki uuden ryhmän luontisivulle Tulosta ruudulle käyttäjän osallistumien ryhmien aikataulut Tulosta ruudulle linkki käyttäjän asetukset-sivulle Tulosta ruudulle valittu kieli sekä linkki valittavissa oleviin kieliin Sidepane-funktio loppuu SidePaneLink-funktio alkaa Selvitä kutsuvan osajärjestelmän url Jos url on sama kuin tulostettava linkki Käytä tyylitiedostossa määriteltyä tyyliä linkin maalaamiseksi ruudulla Jos tulostettava linkki on linkki käyttäjän järjestämään ryhmään Jos puurakenne on auki Tulosta ryhmän kohdalle puurakenteen sulkemislinkki Muuten Tulosta ryhmän kohdalle puurakenteen avaamislinkki Tulosta ruudulle linkki 7.1 sidepane.php-komponentin käyttö Skriptinä toteutettu sidepane.php-komponentti liitetään sovelluslogiikkaan sivun alustusosassa include-direktiivillä. Esimerkki: include "inc/ sidepane.php"; 7.2 Palvelut Reunalistakomponentti tarjoaa seuraavat palvelut

7.2.1 sidepanelink($text, $indent = 0, $state = 0, $url = "", $selected, $group_id, $open) Palvelu palauttaa arvonaan String-jonon, jossa on sivun nimi ja tarvittavat parametrit, esimerkiksi member.php?p=33&id=28 missä p = parentid eli viiteavain Groups-tauluun (Members.GroupID) ja id = osallistujan avain (Members-taulussa eli Members.ID). Parametri Tietotyyppi Pakollinen Kuvaus text String Kyllä Tulostettavan linkin tekstin Indent Int Ei Kerroin tekstin sisennykselle reunalistan puurakenteessa State Int Ei Linkin tila listalla Url String Ei Linkin osoite. Jos parametri on tyhjä, niin tulostetaan pelkkä teksti (text-parametri) Selected String Ei Kutsuvan osajärjestelmän url Group_id Int Kyllä Ryhmän id, johon liittyvää linkkiä ollaan käsittelemässä Open Int Kyllä Tieto siitä, onko tulostettavan linkin puurakenne avoin vai suljettu 7.2.2 sidepane($id, $lang, $urlparametres) Palvelu palauttaa arvonaan HTML-taulukon, jossa on valmis reunalista.

Parametri Tietotyyppi Pakollinen Kuvaus Id int Kyllä Käyttäjän ID, jonka avulla saadaan tieto käyttäjän järjestämistä ryhmistä ja aikatauluista sekä osallistumisista Lang String Kyllä Käyttäjän valitsema järjestelmän kieli Urlparametres String Ei Vapaaehtoinen parametri, joka kertoo tämän hetkisellä sivulla tarvittavat parametrit, mikäli ne eivät selviä sivun urlista Komponentissa tarvittavat SQL-lauseet. SELECT distinct lang FROM locales SELECT id,userid,name FROM groups WHERE userid=". $id." ORDER BY id" SELECT groupid FROM group_history WHERE groupid=". $rslist["id"] SELECT id,groupid,name FROM calendars WHERE groupid=". $rslist["id]. " ORDER BY id" SELECT members.userid, members.groupid, users.firstname, users.lastname FROM members, users WHERE members.userid=users.id AND members.groupid=". $rslist[$id] ORDER BY users.lastname, users.firstname"; SELECT C.groupid, C.name AS calendar_name, C.id AS calendar_id, G.id, G.name FROM calendars C, groups G WHERE C.groupid IN (SELECT groupid FROM members WHERE userid=".$_session["user"]. " )" AND C.groupid=G.id 8. Reunalistakomponentin sovelluslogiikka Reunalistakomponentin puurakenteen avaamiseen ja sulkemiseen tarvittavat tietokantaoperaatiot toteuttaa sovelluslogiikka bl_sidepane.php.

Sovelluslogiikan toiminta on kuvattu alla olevalla pseudokoodilla. Jos sidepaneoperation-muuttuja on arvoltaan 2 Avataan muuttujalla välitetyn ryhmän puurakenne reunalistassa Muuten Jos sidepaneoperation-muuttuja on arvoltaan 1 Suljetaan muuttujalla välitetyn ryhmän puurakenne reunalistassa Sovelluslogiikassa tarvittavat SQL-lauseet. DELETE FROM group_history WHERE userid=. $_SESSION[ user ]. AND groupid= $_POST[ group_id ] INSERT INTO group_history VALUES (userid=. $_SESSION[ user ]., groupid=. $_POST[ group_id ]. ) 9. Session.php PHP-tulkki tallentaa istuntomuuttujat väliaikaiseen tiedostoon kiintolevylle. Oletusarvoisesti tulkki tallentaa nämä tiedostot samaan kansioon, johon tulkki tai palvelinohjelmisto on asennettu. Tyypillisesti tämä kansio on kirjoitussuojattu, joten myös väliaikaistiedostojen tallennus ei onnistu. Koska projektille on varattu oma kansio sovelluksen asennusta varten, pitää väliaikaistiedostojen tallennus ohjata projektille varattuun kansioon. Tämän vuoksi osajärjestelmien ja sovellusloogiikkojen alussa niihin liitetään session.php komponentti jossa kerrotaan tulkille session_save_path-funktiolla polku väliaikaistiedostojen kansioon, sekä käynnistetään sessio. 10 Aikojenjakoalgoritmi matchingalgorithm.php Aikojenjakoalgoritmiin on tehty seuraava lisäys: Lukitsemisen tarkistamisen jälkeen tyhjennetään järjestettävän aikataulun vanhat varaukset. Lisäksi ryhmäaikataulun aikojenjaossa käytettäviä valintaperusteita on muutettu. Henkilökohtaisten aikojenjakamiseen ei ole tullut muutoksia. Muutettu luku on kokonaisuudessaan seuraava. Aikojenjakoalgoritmi laskee aikojenjakoehdotuksen järjestäjän tarjoamien aikojen ja osallistujien ilmoittamien sopivuuksien perusteella. Seuraavassa luvussa on kuvauttu unkarilaisen algoritmin toimintaa tarkemmin. Komponentti käyttää hungarian.php tiedoston sisältämän hungarian-luokan

palveluita hyväkseen. 10.1 Palvelut Komponentti tekee aikojenjakoehdotuksen arrange-palvelulla. Esimerkki arrangen käytöstä: $ok = arrange($id, $parent); Parametri Tietotyyppi Pakollinen Kuvaus parent int Kyllä Viiteavain Groups-taulun tietueeseen. id int Kyllä Viiteavain käsiteltävään aikatauluun. Palaute Tyyppi Kuvaus ok boolean Palauttaa arvon false, jos järjestelyä tai sen tallentamista ei suoritettu loppuun. Jos järjestelyehdouksen laskeminen onnistui ja ehdotus tallennettiin tietokantaan onnistuneesti palautetaan arvo true. 10.2 Toiminnallisuus Jos järjestäjä on lukinnut aikataulun, josta tieto saadaan Calendars-taulun locked kentästä, algoritmi ei laske uutta ehdotusta ja palauttaa arvon false. Tutkii onko aikataulu ryhmä vai henkilökohtaisia tapaamisia varten. Hakee viiteavaimien perusteella aikataulun järjestäjän tarjoamat ajat, sekä osallistujien ilmoittamat sopivuudet. Muodostaa hakutuloksen perusteella kustannusmatriisin. Jos kyseessä on henkilökohtaisten tapaamisten aikataulu, ratkaisee unkarilaisella menetelmällä parhaan aikojenjakoehdotuksen. Kirjoittaa tuloksen tietokantaan Matches taulun booked kenttään.

Jos kyseessä on ryhmäaikataulu, lasketaan mihin järjestäjän tarjoamaan aikaan on eniten ilmottautumisia ja toiseksi otetaan huomioon osallistujien ilmoittamat sopivuudet. Eli eli ensisijaisena valintaperusteena on ilmoittautuneiden määrä ja toisena ilmoitetut sopivuudet. Kirjoittaa lasketun aikojenjakoehdotuksen Matches taulun, booked kenttään. Jos suoritus loppui onnistuneesti palauttaa arvon true. Tietokantakyselyt select locked from Calendars where id=.$id. select type from Calendars where id=.$id. select UserID from Members where GroupID=".$parent."order by UserID select id from offers where CalendarID=".$id." order by id SELECT Matches.UserID, Matches.OfferID, Matches.Pref FROM Matches, Offers where UserID in (SELECT UserID from Members where GroupID=".$parent.") and OfferID=ID and CalendarID=".$id." order by UserID,OfferID update Matches set booked=now() where userid=".$uid." and offerid=.$oid. update Matches set booked=null where userid=".$uid." and offerid=.$oid. UPDATE Matches SET booked=null where UserID in (select UserID FROM Matches, Offers where UserID in (SELECT UserID from Members where GroupID=".$parent.") and OfferID=ID and CalendarID = ".$id.") and OfferID in (select id from offers where calendarid=".$id.")"; 11. Ryhmä group.php Toteutuksessa on käytetty hieman eri suoritusjärjestystä kuin suunnitteludokumentissä esitellyssä (johtuen siitä, että toteutus alkoi ennen lopullisen suunnitteludokumentin valmistumista). Seuraavassa toteutettu yleiskuvaus sovelluslogiikasta. 11.1 Yleiskuvaus sovelluslogiikasta

Osajärjestelmän sovelluslogiikka on kuvattu alla olevalla pseudokoodilla. Suluissa olevat numerot viittaavat SQL-lauseeseen, joka on kuvattu koodin lopussa. Lataa komponentit Alusta muuttujat Jäsennä parametrit Tarkista kielikoodi Tarkista istunnon voimassaolo Jos istunto ei ole voimassa Valmistaudu siirtymään sisäänkirjausosajärjestelmään Muutoin jos sisäänkirjautunut ei ole järjestäjä Valmistaudu siirtymään sisäänkirjausosajärjestelmään Muutoin jos Järjestäjä ei muokkaa omaa ryhmäänsä ja ryhmän avain ei ole 0 Valmistaudu siirtymään uuden ryhmän luontiin Jos ollaan siirtymässä toiseen osajärjestelmään Sulje tietokanta Siirry osajärjestelmään Jos ryhmän avain ei ole nolla ladataan ryhmän tiedot muuttujiin(4) Jos järjestäjä on valinnut tallennuksen Tarkista syötteet Jos syötteet kelpaavat Jos järjestäjällä jo samanniminen ryhmä tietokannassa(5) annetaan virheilmoitus. Muutoin jos ryhmän avain on nolla Tallenna ryhmä(1) Muutoin Päivitä ryhmä(2) Muutoin jos järjestäjä on valinnut poiston Poista ryhmä(3) Tallenna sivuhistoria Siivoa muuttujien arvot Näytä käyttäliittymä Terminoi osajärjestelmä

11.2 SQL-lauseet Numero 1 2 3 4 5 Lause INSERT INTO Groups (ID,UserID,Name,Updated) UPDATE Groups SET Name WHERE UserID = (järjestäjän avain) AND ID = (ryhmän avain) DELETE FROM Groups WHERE UserID = (järjestäjän avain) AND ID = (ryhmän avain SELECT * FROM Groups WHERE UserID = (järjestäjän avain) AND ID = (ryhmän avain) SELECT * FROM Groups where Name= (ryhmän nimi)and userid =(järjestäjän avain) 12 Osallistuja - member.php Ei muutoksia. Osajärjestelmän sovelluslogiikka ja tietokantakyselyt on kuvattu tässä luvussa, sillä ne puuttuivat suunnitteludokumentista. 12.1 Osajärjestelmän Sovelluslogiikka Osajärjestelmän sovelluslogiikka on kuvattu alla olevalla pseudokoodilla. Suluissa olevat numerot viittaavat SQL-lauseeseen, joka on kuvattu koodin lopussa. Lataa komponentit Alusta muuttujat Jäsennä parametrit Tarkista kielikoodi Tarkista istunnon voimassaolo Jos istunto ei ole voimassa Valmistaudu siirtymään sisäänkirjausosajärjestelmään

Muutoin jos Järjestäjä ei muokkaa omaa ryhmäänsä Valmistaudu siirtymään uuden ryhmän luontiin Muutoin jos sisäänkirjautunut ei ole järjestäjä Valmistaudu siirtymään sisäänkirjausosajärjestelmään Jos ollaan siirtymässä toiseen osajärjestelmään Sulje tietokanta Siirry osajärjestelmään Jos osallistujan avain ei ole nolla ladataan osallistujan tiedot tietokannasta muuttujiin(1) jos kyseinen osallistuja on järjestäjä jos kyseinen osallistuja ei ole järjestäjä itse estetään kyseisen käyttäjän tietojen muokkaus Jos ollaan lisäämässä uutta käyttäjää Luetaan muuttujien arvot lomakkelta Tarkistetaan muuttujien oikeellisuus Jos muuttujat ovat sallittuja Jos järjestelmässä on samalla email osoitteella tietue kannassa ladataan tiedot muuttujiin.(2) jos kyseinen osallistuja on järjestäjä jos kyseinen osallistuja ei ole järjestäjä itse estetään kyseisen käyttäjän tietojen muokkaus Jos osallistujan avain on 0 Kirjoitetaan osallistujan tiedot members tauluun(3) Muuten Päivitetään käyttäjän tietoja(4) Lisätään käyttäjä members tauluun(5) Jos ollaan lisäämässä käyttäjiä csv-tiedostosta Jos syöte on tyhjä annetaan varoitus Muuten kutsutaan csv.php:n jäsennysfunktiota Jos ollaan poistamassa käyttäjää Poistetaan käyttäjä members taulusta(6) Tallenna sivuhistoria Siivoa muuttujien arvot Näytä käyttäliittymä Terminoi osajärjestelmä

12.2 SQL Kyselyt Numero 1 2 3 4 5 6 Lause select * from Users where id=(osallistujan tunnus) select * from Users where email=(syötetty sähköpostiosoite) insert into Users values(uusi tunnus,sukunimi,etunimi,email,guid,guid, valittu kieli,aikaleima,aikaleima) update Users set lastname=(sukunimi), firstname=(etunimi), email=(email), lang =(valittu kieli) where id=(osallistujan tunnus) insert into Members values(osallistujan tunnus,ryhmän tunnus) delete from Members where userid=(osallistujan tunnus) and groupid = (ryhmän tunnus) 13 csv jäsentäjä csv.php Csv jäsentäjä on saanut uuden parametrin lang. Lisäksi komponentin toimintalogiikka on muuttunut melko paljon. Tässä csv.php:n muutokset verrattuna suunnitteludokumenttiin. CSV - jäsentäjä jäsentää tekstisyötteestä osallistujien tiedot ja lisää osallistujat tietokantaan. Otsikko Palvelut Komponentti jäsentää ja tallentaa tietokantaan osallistujien tietoja tekstisyötteestä parsecsvpalvelulla. Esimerkki: $ok = parsecsv($parent, $csv, $lang);

Parametri Tietotyyppi Pakollinen Kuvaus parent int Kyllä Viiteavain ryhmään, jonka osallistujaksi jäsennetty tieto tallennetaan. csv String Kyllä Jäsennettävä tekstisyöte. Otsikko rivi on pakollinen tekstisyötteessä. Otsikossa pakollisena kentät sukunimi, etunimi ja sähköpostiosoite. lang String Ei Lisättävien osallistujien kieli, oletusarvona DEFAULT _LANGUAGE Palaute Kuvaus > 1 Jäsennys on onnistunut. Arvo viittaa tietokantaan tallennettuun tietueeseen, joka oli aakkosjärjestyksessä viimeinen tekstisyötteessä. < 0 Jäsennys on epäonnistunut, antaa palutteena sen rivin numeron negatiivisena miinus 10, jonka jäsennys ei onnistunut. Seuraavat arvot ovat varattu muille jäsennyksen epäonnistumisen syille. -1: parent kentässä ei-sallittu arvo -2: syöte on tyhjä -3: otsikkorivi ei sisällä tarvittavia kenttiä -4: dbgetid() funktion kutsu epäonnistui -5: Mitään ei lisätty kantaan -6: otsikon ja sisällön sarakkeiden määrä ei täsmää

13.1 Toiminnallisuus Tarkistaa, onko syöte tyhjä. Jos syötettä ei ole, toiminto keskeytyy ja kutsuneelle proseduurille palautetaan virheilmoitus. Luetaan otsikkorivin tiedot Kerää otsikkorivin tietojen perusteella syötteestä etunimen, sukunimen ja sähköpostiosoitteen. Jos jokin otsikon pakollisista sarakkeista puuttuu lopetetaan ja palautetaan -3. Jos jäsentämisessä ei ilmennyt ongelmia, tiedot tallennetaan tietokantaan Users-tauluun ja lisäksi kirjoittaa lisätyn henkilön osallistujaksi Members tauluun. Jos jäsennys onnistui, paluttaa aakkosjärjestyksessä viimeisenä lisätyn henkilön tunnuksen users taulussa.