ITI0205 2020 3 iseseisev töö
Redaktsioon seisuga 4. november 2020, kell 13:02 kasutajalt Verrev (arutelu | kaastöö) (→Keskkonnad ja serverid)
ITI0205 3. iseseisev töö - andmebaasiga serverirakendus
Mida tuleb teha
Sinu ülesanne on kirjutada mini-Facebook kasutades selleks PHP-d ja MySQL andmebaasi. Kui oskad võid kasutada CSS raamistikke. Puhta Javascripti ja jQuery kasutamine on samuti lubatud.
Rakendus on vaja paigaldada turing.cs.ttu.ee serverisse aadressile http://turing.cs.ttu.ee/~uni-id/prax3 ja rakenduse lähtekood Gitlab.cs.ttu.ee kesskkonda.
Rakenduse põhifunktsionaalsus
Nende nõuete realiseerimine on arvestuse saamiseks kohustuslik ja need annavad 5 punkti
- Sarnaselt "päris" Facebookiga pead postituste vaatamiseks või ise postitamiseks olema süsteemi sisse logitud e-posti aadressi parooliga. Minimaalses versioonis võid kasutajad (sh kasutaja võtme ja fotod) otse andmebaasi kirjutada.
- Kasutajal on kasutajanimega seotud profiilivaade kus on näha tema profiili andmed ja postitused. Postitusi näidatakse ajalises järjestuses - hilisemad postitused enne ja varasemad hiljem.
- Registreeritud kasutaja peab saama sisestada enda kirjeldusteksti, asukoha (linn). Baasversiooni juures fotot ülesse laadima ei pea vaid võib kuvada vaikepilti.
- Sisselogitud kasutaja saab otsida teisi kasutajaid nimeosa ja/või asukoha järgi. Otsing ei ole tõstutundlik, s.t. kuidas suur ja väiketähti kasutada ei peaks olema oluline.
- Registreeritud kasutaja saab saata teisele kasutajale sõbrakutse. Baasversioonis aktsepteeritakse sõbraktuse automaatselt.
- Kui kasutaja on juba sisse logitud, siis näeb ta enda uudisvoos oma sõprade postitusi ajalises järjestuses.
- Sisselogitud kasutaja saab lisada postituse milles on tekst. Skripte, embed-elemente, formaaditud teksti ja muud HTMLi seal ei näidata.
- Kasutaja saab sõprade postitusele lisada reaktsiooni (like) Reaktsioone näidatakse iga postituse juures. Kasutaja saab enda antud reaktsiooni tagasi võtta.
- Kasutaja saab lisada oma sõprade postitusele kommentaari. Sarnaselt postitusele seal HTMLi, skripte ja muud ei näidata.
- Kasutaja saab teise kasutaja oma sõbralistist eemaldada
- Kasutaja saab süsteemist välja logida.
Lisaks peavad olema täidetud elementaarsed turvanõuded
- Ei kuvata otse, nö puhastamata välja kasutaja sisestatud tekste (javascript injection ehk XSS takistatud)
- Ei kasutata otse, nö puhastamata, kasutaja sisestatud tekste SQL päringute kokkupanekul (sql injection takistatud)
- Parool peab olema salvestatud andmebaasi krüpteeritult
Lisaks:
- HTML ja CSS peaksid olema eraldi. Nii on sul mugav seda hallata ja muuta.
- Lehtede HTML peaks olema valideeruv ja javascripti kasutamisel ei tohi konsoolis olla veateateid.
- Leht ei tohi välja näha väga jube. Vaata ka: http://lambda.ee/wiki/Htmli_kujunduse_%C3%BCldp%C3%B5him%C3%B5tted
Lisaks rakenduse põhifunktsionaalsusele
Iga realiseeritud nõue annab ühe punkti, kokku 10p.
- Saad registreerida uue kasutaja. Kasutaja registreerimisel pead saama anda enda nime, e-posti ja parooli koos parooli kordusega. E-posti aadress peab olema unikaalne ja parooli valimisel süsteem kontrollima parooli kordust.
- Pärisnime põhjal loob süsteem kasutaja võtme - näiteks kui kasutaja nimi on Peeter Kask, siis kasutajanimi on peeter.kask. Lisa: Kui samanimeline aga teise e-posti aadressiga kasutaja juba eksisteerib, siis genereerib süsteem kasutajanime peeter.kask.1
- Lisaks kirjeldustekstile ja asukohale saab kastuada ülesse laadida oma foto. Fotot kuvatakse sarnaselt päris-Facebookiga kasutajaprofiili juures. Juhul kui fotot pole lisatud kuvatakse selle asemel vaikepilti.
- Registreeritud kasutaja saab postituses lisada ka pildi
- Edasiarendatud sõbrakutsete korral peab enne sõbralisti lisamist see kellele kutse saadeti selle aktsepteerima.
- Kasutaja saab sõprade postitusi oma seinale edasi postitada.
- Rakendus on kasutatav ka mobiilis
- Realiseeritud on rakenduse ruutimine, s.t kättesaadav mitte ainult parameetritega antud asukohtadest, s.t profiilivaate jaoks profile.php?user=peeter.kask vaid /profile/peeter.kask
- Realiseeritud ja kujundatud on vealeht, mida näidatakse siis kui soovitud lehte ei leita või süsteem kokku jookseb
- Kasutatud on üht või enamat Composeri teeki vabal valikul.
Lisapunktid
Lisaks 15 baaspunktile on võimalik saada ülesande eest kaks lisapunkti (kokku 17 punkti)
Selleks peab:
- Kasutaja saama registreerida ja sisse logida päris-Facebookiga
- Rakenduse vaated olema realieeritud mingil templeidimootoril a'la Twig, Blade vms
Millises järjekorras asju teha
- Esimese sammuna mõtle välja millised vaated rakendusse üldse peaksid tulema. Tekita tühjad PHP failid nagu
index.php
,login.php
jaregister.php
- Mõtle läbi millistesse kataloogidesse erinevad failid paigutada. Kui neid ühes kataloogis hoida võib faile tekkida palju ja neid on tülikas leida.
- Mõtle läbi ühes vaates - näiteks kasutaja uudisvoos - olevad elemendid. Realiseeri see HTMLis/CSSis. Seda saad kasutada alusesks muudes vaadetes.
- Mõtle välja millised oleksid korduvad osad - kindlasti on seda menüü. Tõsta menüü-HTML eraldi faili, näiteks
components/menu.php
ja lingi see põhivaatesse, näiteks<?php include 'components/menu.php'
...
Keskkonnad ja serverid
Selle ülesande jaoks peaksid kasutama 3 serverit:
- Sinu lokaalne PHP installatsioon (localhost) - kus jooksevad nii Apache veebiserver, PHP rakendusekiht kui MySQL andmebaasiserver.
- TTU Gitlab (gitlab.cs.ttu.ee) lähtekoodi hoidmiseks ja vahesammuks Turingu serverisse paigutamisel.
- Turingu server (turing.cs.ttu.ee) kuhu paigaldatakse valmis rakendus.
Abimaterjale ja viiteid
- Kiire juhend Giti kasutamiseks: https://pydoc.pages.taltech.ee/git/git_ttu.html
- Veidi põhjalikum õpetus: https://pydoc.pages.taltech.ee/git/git_general.html
- Lekkinud Facebooki lähtekood aastast 2007: https://gist.github.com/nikcub/3833406
- Linuxi käsurea kasutamine Turingu serveri näitel