diff --git a/README.md b/README.md index d07ef090..2ceab386 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,74 @@ Kipa ==== -Kipa- / Tupa2-ohjelmisto, jota käytetään partiotaitokilpailujen tuloslaskentaan. +Kipa- / Tupa2-ohjelmisto, jota käytetään partiotaitokilpailujen tuloslaskentaan. https://www.facebook.com/Kisapalvelu/ -Asennusohjeet: https://sites.google.com/site/kisapalvelukipa/kaeytae-ja-asenna +Asennusohjeet, Linux: docs/kipa asennusmuistio ubuntu 2017.txt +Windows: https://sites.google.com/site/kisapalvelukipa/kaeytae-ja-asenna Vanhat sivustot: * https://sites.google.com/site/kisapalvelukipa/ * http://sourceforge.net/projects/tupa2/ +**Ohjelmaa kokeiltu:** + +* Django v.1.11 +* Python v.2.7 +* Chrome / Firefox + +**Tilanne: toimivat** + +* Kipa -sivusto +* Admin -sivusto +* static files +* migrate +* käyttäjäautentikointi (serverilaajuinen) +* piirienväliset pisteet +* dia2django +* production serveri (nginx ja uwsgi) + +**Ei toimi tai ei testattu:** + +* testit (käyttäjähallinta ei mukana ja parametrit ei välity) +* HTTPS tarvii sertifikaatit web-serverille +* i18n +* muut turhat härpäkkeet, joita en osaa käyttää + +**Tunnetut, ei toivotut ominaisuudet (known bugs):** + +* Jossain harvoissa tilanteissa, samassa sarjassa olevat samannimiset vartiot saavat samat tulokset, riippumatta syötteistä. +* Samassa sarjassa olevat samannimiset tehtävät saavat toisetensa tulokset tulosten laskennassa. +* Jos interpoloinnissa on vain yksi vartio ja nollasuorituksen kaavana max*muk, niin ainut vartio saa 0 pistettä. +* Yhteen tehtävään voi syöttää vain yksi käyttäjä kerrallaan, joko varsinaisia tai tarkistussyötteitä. +* Negatiivinen aikaväli antaa tulokseski nollan. +* Aika -syötekentässä, E- tai H- syöte rikkoo ajan muotoilun, mutta korjaantuu tallentamalla 0 (tai joku) aika. +* Tehtävän kaavassa desimaalipilkku kaataa laskennan (kaavan tarkastus ei aukoton). + +**Toivotut ominaisuudet:** + +* Python 3 ja Django 2 -tuki +* Docker container +* Manuaalin päivittäminen +* Vartioiden import taulukosta / Kuksasta (tai muusta ilmoittautumisjärjestelmästä) +* Tuloslaskennan huomiot, tuomarineuvoston kirjaukset, kilpailijoiden tarkastuspyynnöt tehtävien / syötteiden yhteyteen +* Tietojen tallennus taustalla +* Tietojen varmuuskopiointi ja palautus, eli Undo / muutosten logaus +* Kisan tilanneseuranta +* Piirit ja lippukunnat valita listasta, ei kirjoittamalla -> lyhenteet +* Tulosten massavienti tikulle, eli yhdestä napista kaikki formaatit ja sarjat +* Tulosten näyttämiseen tykillä valinta, mitkä sarjat + piirien tilanne ja onko useampi sarja samalla sivulla +* Mahdollisuus liittää kuvia (videota?) tulosten tarkastuksen yhteyteen / kommentteihin +* Tulosseuranta / tilanneseuranta netin yli kotiväelle + +**Muita ohjeita:** +* Tietokantatiedostojen (.dia) katselemiseen ja muokkaamiseen voit käyttää ilmaista 'Dia Diagram Editor' -ohjelmaa. https://sourceforge.net/projects/dia-installer/ (asennus debian/ubuntu ympäristössä: sudo apt-get install dia ) + +* Dia2django -skriptin käyttö: + * Mene omaan kipa kansioon ...kipa/web/tupa/ + * Aja komento: python dia2django.py tietokanta.dia models.py + * Skripti päivittää ohjelman models.py tiedoston tietokantakentät annetun .dia tiedoston mukaiseksi. + Lisenssi ======== diff --git a/docs/kipa asennusmuistio ubuntu 2017.txt b/docs/kipa asennusmuistio ubuntu 2017.txt new file mode 100644 index 00000000..ae04108b --- /dev/null +++ b/docs/kipa asennusmuistio ubuntu 2017.txt @@ -0,0 +1,117 @@ +###################### +# Kipa kisapalveluohjelmiston asentaminen ubuntun kaltaisiin järjestelmiin. +# +# Kaikki risuaita-alkuiset rivit ovat kommentteja ja niitä ei tarvitse kirjoittaa komentoriville +# +# Asennusta kokeiltu: +# Ubuntu 17.10, Linux mint 18.3 ja Ubuntu Gnome 16.04 käyttöjärjestelmillä +# Muiden pakettien versiot: +# python 2.7 +# django 1.11 +# uwsgi 2.0 +# nginx 1.10 +# +# Alla on ohjeet Kipan asetamiseksi sekä yhdelle koneelle django testipalvelinta käyttäen, että lähiverkkopalvelimena toimivalle koneelle nginx -nettipalvelinohjelmistoa käyttäen. +# Kaikkia laitteita, ohjelmien asennusta ja toimintaa kannattaa kokeilla jo ennen kisapaikalle siirtymistä, kiireisten ongelmatapausten välttämiseksi +# +# Huomautus: Minä en ole tietoturva-alan ammattilainen ja en vastaa sinun tiedostoistasi tai koneistasi näitä tai muita ohjeita noudattaessasi. Joitain ohjeita Django projektin tietoturvaan liittyen löydät esimerkiksi: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/web_application_security +# +# Asennettuasi kipa -ohjelman, voit luoda järjestelmän pääkäyttäjän komennolla: python manage.py createsuperuser +# pääkäyttäjän tunnuksilla voit kirjautua admin -sivulle http://127.0.0.1:8000/admin/ (jos käytät palvelinta verkossa muuta ip osoite) josta voit luoda muita käyttäjiä. +# +###################### +# Yhden tietokoneen asennus ilman verkkokäyttöä: + +# järjestelmän päivittäminen +sudo apt-get update +sudo apt-get upgrade + +# Käynnistä järjestelmä uudelleen + +# tarvittavien pakettien asentaminen / päivittäminen +sudo apt-get install git python2.7-dev python-pip +sudo -H python -m pip install --upgrade pip +sudo -H pip install setuptools +sudo -H pip install django==1.11 + +# Käynnistä järjestelmä uudelleen + +# kipa -ohjelman haku github -sivulta (aja tämä komento siinä kansiossa johon haluat tiedostot ladattavan ja sinulla on oikeudet käyttää) +git clone https://github.com/Pena86/kipa.git + +# siirrytään ohjelmakansioon ja käynnistetään testipalvelin +cd kipa/web/ +python manage.py runserver + + +#Luo itsellesi palvelimen pääkäyttäjätili komennolla: (sähköpostiosoitteen ei tarvi olla toimiva, mutta pitää olla oikeaa muotoa) Luomallasi tunnuksella voit kirjautua Kipa -järjestelmään, tuoda tai luoda kisan ja luoda muita käyttäjiä. +python manage.py createsuperuser + + +# mene selaimella osoitteeseen http://127.0.0.1:8000/ ja kipa-ohjelman pitäisi olla käytössä +# ohjelman voi sulkea komentorivillä painamalla CONTROL-C +# +###################### +# Kipan asentaminen palvelinkoneelle usean koneen verkkokäyttöä varten +# + +# järjestelmän päivittäminen +sudo apt-get update +sudo apt-get upgrade + +# Käynnistä järjestelmä uudelleen + +# tarvittavien pakettien asentaminen / päivittäminen +sudo apt-get install git python2.7-dev python-pip nginx +sudo -H python -m pip install --upgrade pip +sudo -H pip install setuptools +sudo -H pip install uwsgi django==1.11 + +# lisätään käyttäjä www-data ryhmään dialout +sudo adduser www-data dialout + +# Käynnistä järjestelmä uudelleen + +# siirrytään hakemistoon (jos aiot ajaa kipa-ohjelmaa muusta hakemistosta, sinun pitää muokata uusi hakemistopolku ainakin kipa_nginx.conf -tiedostoon) +cd /var/www/ +# ladataan kipa -ohjelmisto githubista +sudo git clone https://github.com/Pena86/kipa.git +# muutetaan kansion kipa ja sen alikansioiden ja tiedostojen omistajaksi ja ryhmäksi www-data +sudo chown -R www-data:www-data kipa/ + +# linkitetään kipa_nginx.conf -tiedosto nginx -ohjelman käytettäväksi +sudo ln -s /var/www/kipa/web/kipa_nginx.conf /etc/nginx/sites-enabled/kipa_nginx.conf +# käynnistetään nginx -ohjelma uudestaan +sudo /etc/init.d/nginx restart + +# siirrytään kansioon ja ajetaan uwsgi -ohjelma (käyttäjänä www-data), joka suorittaa django -projektin tiedostoja nettipalvelinohjelmiston niitä pyytäessä +cd /var/www/kipa/web/ +sudo -H -u www-data uwsgi --ini kipa_uwsgi.ini + +# mene selaimella osoitteeseen http://127.0.0.1/ ja kipa-ohjelman pitäisi olla käytössä (jos muutat asetustiedostoihin palvelinkoneen ip-osoitten, käytä sitä myös paikallisella koneella) +# ohjelman voi sulkea komentorivillä painamalla CONTROL-C + +# Että voisit käyttää kipa -ohjelmaa muilla lähiverkon koneilla, tulee sinun vielä tehdä pari asiaa: +# - Selvitä palvelinkoneen ip -osoite esim. koneen tai lähiverkkoreitittimesi asetuksista +# - Muuta palvelinkoneen ip -osoite /var/www/kipa/web/kipa_nginx.conf -tiedoston server_name -kohtaan ja käynnistämään nginx -palvelinohjelman uudestaan komennolla sudo /etc/init.d/nginx restart +# - Lisää palvelinkoneen ip -osoite /var/www/kipa/web/settings.py -tiedoston ALLOWED_HOSTS -kohtaan ja käynnistä uwsgi -komento (yltä) uudestaan +# - Saatat tarvita asettaa lähiverkkoreitittimeesi portin- tai ip -osoitteen reitityksen palvelinkoneen osoitteeseen +# nyt myös lähiverkon koneilta pitäisi päästä kipa -ohjelmaan kirjoittamalla selainohjelman osoiteriville palvelinkoneen ip-osoite. + + +#Luo itsellesi palvelimen pääkäyttäjätili komennolla: (sähköpostiosoitteen ei tarvi olla toimiva, mutta pitää olla oikeaa muotoa) Luomallasi tunnuksella voit kirjautua Kipa -järjestelmään, tuoda tai luoda kisan ja luoda muita käyttäjiä. +python manage.py createsuperuser + + +# seuraavilla komennoilla saat lisää tietoa ja voit hallita nginx -ohjelman toimintaa +sudo /etc/init.d/nginx status +sudo /etc/init.d/nginx stop +sudo /etc/init.d/nginx start +nano /var/log/nginx/error.log (painamalla CONTROL-X suljet editorin) +nano /var/log/nginx/access.log (painamalla CONTROL-X suljet editorin) + +# Django testipalvelimen käynnistäminen +cd /var/www/kipa/web/ +sudo -H -u www-data python manage.py runserver +# mene selaimella osoitteeseen http://127.0.0.1:8000/ ja kipa-ohjelman pitäisi olla käytössä +# ohjelman voi sulkea komentorivillä painamalla CONTROL-C diff --git a/docs/tietokanta2015.png b/docs/tietokanta2015.png new file mode 100644 index 00000000..64f06e96 Binary files /dev/null and b/docs/tietokanta2015.png differ diff --git a/docs/views_templates.txt b/docs/views_templates.txt new file mode 100644 index 00000000..fc358fbc --- /dev/null +++ b/docs/views_templates.txt @@ -0,0 +1,113 @@ +Mitä templateja kukin näkymä käyttää: + +Umpihanki » Etusivu + + + + + +#### Suoritusten syöttö #### + +Umpihanki » Syötä tuloksia (sekä) Syötä tuloksia - tarkistussyötteet + + + + jokaiselle sarjalle + +Umpihanki » Syötä tuloksia » (tehtävä) + + + + + +Umpihanki » Tuomarineuvoston antamien tulosten määritys + + + + jokaiselle sarjalle + + + +#### Tulokset #### + +Umpihanki » Tulokset sarjoittain (sarjan tulokset) (sekä) (tulosta tuloksia) (sekä) (tulokset CVS-tiedostoon) + + + + +Umpihanki » Tulokset sarjoittain » (sarja) + + + + +(tulosta tuloksia) + + +(heijasta tuloksia) + + +Umpihanki » Laskennan tilanne + + + + + +#### Kisan määritykset ### + +Umpihanki » Määritä kisa + + + + + +Umpihanki » Määritä vartiot + + + + + + +Umpihanki » Muokkaa tehtävää + + + + (jokaiselle sarjalle) + + +Umpihanki » Muokkaa tehtävää » (tehtävä) + + + + + + templates/tupa/forms/... + +Umpihanki » Testituloksien määritys + + + + + (jokaiselle sarjalle) + + +#### Ylläpito #### + +(listaa kaikki kisat) + + + +(tallenna kisa) + +Umpihanki » Korvaa kisa tiedostosta + + + + + +Umpihanki » Poista kisa + + + + + +#### Apua #### +(ohje) diff --git a/web/fixtures/tests/Piiritulos_tasapisteet_tietokanta.xml b/web/fixtures/tests/Piiritulos_tasapisteet_tietokanta.xml new file mode 100644 index 00000000..b7c93e0f --- /dev/null +++ b/web/fixtures/tests/Piiritulos_tasapisteet_tietokanta.xml @@ -0,0 +1,703 @@ + + + + Piiritulos_tasapisteet + 1.1.1900 + Kotona + False + + + sa1 + + + 8 + 1 + 2 + 3 + + + 101 + aa + 15 + aa + aa + + + + + + + + 102 + ab + 15 + bb + bb + + + + + + + + 103 + ac + 15 + cc + cc + + + + + + + + 104 + ad + 15 + dd + dd + + + + + + + + 105 + ae + 15 + ee + ee + + + + + + + + 106 + af + 15 + dd + dd + + + + + + + + 107 + ag + 15 + dd + dd + + + + + + + + 108 + ah + 15 + ee + ee + + + + + + + + 109 + ai + 15 + ee + ee + + + + + + + + 110 + aj + 15 + dd + dd + + + + + + + + 111 + ak + 15 + dd + dd + + + + + + + + 112 + al + 15 + f + f + + + + + + + + 113 + am + 15 + f + f + + + + + + + + 114 + an + 15 + f + f + + + + + + + + 115 + ao + 15 + bb + bb + + + + + + + + 116 + ap + 15 + f + f + + + + + + + + 117 + aq + 15 + f + f + + + + + + + + a1 + + + + + 1 + ss + 15 + False + + False + + + a + piste + a + 299 + + + 10.0 + 80 + 455 + + + + 5.0 + 81 + 455 + + + + 7.0 + 88 + 455 + + + + a + kp + a + 145 + + + sa2 + + + 8 + 1 + 2 + 3 + + + 202 + bb + 16 + aa + aa + + + + + + + + 203 + bc + 16 + bb + bb + + + + + + + + 204 + bd + 16 + cc + cc + + + + + + + + 205 + be + 16 + dd + dd + + + + + + + + 206 + bf + 16 + ee + ee + + + + + + + + 207 + bg + 16 + ee + ee + + + + + + + + 208 + bh + 16 + ee + ee + + + + + + + + 209 + bi + 16 + ee + ee + + + + + + + + 210 + bj + 16 + f + f + + + + + + + + 211 + bk + 16 + f + f + + + + + + + + 212 + bl + 16 + f + f + + + + + + + + 213 + bm + 16 + f + f + + + + + + + + 214 + bn + 16 + f + f + + + + + + + + 215 + bo + 16 + f + f + + + + + + + + 216 + bp + 16 + aa + aa + + + + + + + + 217 + bq + 16 + f + f + + + + + + + + 218 + bz + 16 + f + f + + + + + + + + b2 + + + + + 1 + ss + 16 + False + + False + + + a + piste + bb + 300 + + + 5.0 + 82 + 456 + + + + 5.0 + 83 + 456 + + + + 7.0 + 89 + 456 + + + + 6.0 + 112 + 456 + + + + a + kp + a + 146 + + + sa3 + + + 8 + 1 + 2 + 3 + + + 303 + cc + 17 + aa + aa + + + + + + + + 304 + cd + 17 + bb + bb + + + + + + + + 305 + ce + 17 + cc + cc + + + + + + + + c3 + + + + + 1 + ss + 17 + False + + False + + + a + piste + cc + 301 + + + 5.0 + 84 + 457 + + + + 10.0 + 85 + 457 + + + + 7.0 + 90 + 457 + + + + a + kp + a + 147 + + + sa4 + + + 8 + 1 + 2 + 3 + + + 404 + dd + 18 + aa + aa + + + + + + + + 405 + de + 18 + bb + bb + + + + + + + + 406 + df + 18 + cc + cc + + + + + + + + d4 + + + + + 1 + ss + 18 + False + + False + + + a + piste + dd + 302 + + + 7.0 + 86 + 458 + + + + 10.0 + 87 + 458 + + + + 5.0 + 91 + 458 + + + + a + kp + a + 148 + + \ No newline at end of file diff --git a/web/kipa_nginx.conf b/web/kipa_nginx.conf new file mode 100644 index 00000000..323392d9 --- /dev/null +++ b/web/kipa_nginx.conf @@ -0,0 +1,35 @@ +# mysite_nginx.conf + +# the upstream component nginx needs to connect to +upstream django { + server unix:///tmp/kipa.sock; # for a file socket + # server 127.0.0.1:8001; # for a web port socket (we'll use this first) +} + +# configuration of the server +server { + # the port your site will be served on + listen 80; + # the domain name it will serve for + server_name 127.0.0.1 # substitute your machine's IP address or FQDN, whitespace separated + charset utf-8; + + # max upload size + client_max_body_size 75M; # adjust to taste + + # Django media + location /kipamedia { + alias /var/www/kipa/web/media; # your Django project's media files - amend as required + } + + #location /static { + # alias /var/www/kipa/web/media; # your Django project's static files - amend as required + #} + + # Finally, send all non-media requests to the Django server. + location / { + #location /kipa { # Use this instead, if redirect not in use + uwsgi_pass django; + include /var/www/kipa/web/uwsgi_params; # the uwsgi_params file you installed + } +} diff --git a/web/kipa_uwsgi.ini b/web/kipa_uwsgi.ini new file mode 100644 index 00000000..f1e163d4 --- /dev/null +++ b/web/kipa_uwsgi.ini @@ -0,0 +1,52 @@ +# mysite_uwsgi.ini file +[uwsgi] + +# the user id of the process once it’s started (requires elevated premissions to run) +#uid = www-data +# the group id of the process once it’s started +#gid = www-data + +# Django-related settings +# the base directory (full path) +chdir = %d +# Django's wsgi file +module = wsgi:application +# the virtualenv (full path) +if-env = VIRTUAL_ENV +# En testannut toimiko tämä määrits näin +#print = Your virtualenv is %(_) +virtualenv = %(_) +endif = + +# process-related settings +# master +master = true +# maximum number of worker processes +processes = 3 +# the socket (use the full path to be safe +socket = /tmp/kipa.sock +# ... with appropriate permissions - may be needed +chmod-socket = 666 +# clear environment on exit +vacuum = true + +# Vaatii ao.kansion luonnin ja oikeudet +#emperor = /etc/uwsgi/vassals + +# create a pidfile +#safe-pidfile = /var/run/kipa-master.pid + +harakiri = 60 # respawn processes taking more than 20 seconds +#limit-as = 128 # limit the project to 128 MB +max-requests = 5000 # respawn processes after serving 5000 requests +# background the process & log +# Vaatii ao.kansion luonnin ja oikeudet +#daemonize = /var/log/uwsgi/kipa.log + +# Log file - kääntää outputin terminaalista tiedostoon +#logto = /var/log/uwsgi/kipa.log + + +pythonpath = /usr/lib/python2.7/dist-packages/ +#nosite = true + diff --git a/web/manage.py b/web/manage.py index 5660e18f..b1a4e7c8 100755 --- a/web/manage.py +++ b/web/manage.py @@ -1,19 +1,19 @@ #!/usr/bin/python2 -import sys +import sys, os from tupa.dia2django import luoMallienRungot -from django.core.management import execute_manager -#try: -import settings # -import legacySettings # Legacy settings for exporting an legacy db -#except ImportError: -#import sys -# sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) -# sys.exit(1) + +#import settings # +#import legacySettings # Legacy settings for exporting an legacy db + if __name__ == "__main__": - set=settings - if len(sys.argv) : - if sys.argv[1] == 'dumpdata': - set=legacySettings - execute_manager(set) + if len(sys.argv) and sys.argv[1] == 'dumpdata': + del sys.argv[1] + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "legacySettings") + else: + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings_dev") + + from django.core.management import execute_from_command_line + execute_from_command_line(sys.argv) + diff --git a/web/media/kipa.css b/web/media/kipa.css index f7355f16..f736546e 100644 --- a/web/media/kipa.css +++ b/web/media/kipa.css @@ -194,13 +194,27 @@ tr .odd:hover background:#FF9; } +#kisataulukko tr td { + padding: 7px; + padding-right: 15px; +} + +#kisataulukko a { + background: transparent url("/kipamedia/arrow_blue.gif") no-repeat scroll 0px 1px; + padding-left: 15px; +} + +#kisataulukko tr:nth-child(even) { + background-color: #faffda; +} + #taulukko th { font-size:11px; text-align:left; font-weight:bold; color:#fff; - background-color:#222; + background-color:#305520; /*#222;*/ /* #5169b3;*/ padding:3px; /* NOTE: th padding must be set explicitly in order to support sticky table headers in IE */ } @@ -236,7 +250,7 @@ tr .odd:hover font-size:x-small; font-weight:bold; color:#fff; - background-color:#222; + background-color:#305520;/*#222;*/ /* #5169b3; oli #b9c9fe; */ vertical-align:top; padding:5px; @@ -249,6 +263,20 @@ tr .odd:hover background-color:#CCC; } + +#tehtava-tila +{ + background-color:#305520; + border:0; + padding:2; + color:#fff; +} + +#tehtava-tila a +{ + color:#00a9ff; +} + #tehtava-taulukko { font-family:"Lucida Sans Unicode", "Lucida Grande", Sans-Serif; @@ -370,13 +398,32 @@ tr .odd:hover font-family:Verdana,"Lucida Grande",Lucida,sans-serif; } +#login { + float:right; + margin-top:-4px; + margin-bottom:0; + padding-bottom:0; + height:18px; +} + +#messages { + float:right; + position: relative; + background-color: #EEE; + margin: auto; + padding-left: 5px; + padding-right: 5px; + border: 3px solid #ccc; + width: 400; +} + #breadcrumbs { background:url(/kipamedia/green-bar.png); height:15px; margin-bottom:-1px; padding:3px 0 3px 8px; - position:relative; + /*position:relative;*/ z-index:2; color:#5D5D5D; font-size:11px; @@ -439,27 +486,22 @@ a.sitetoolbarnavactive:hover { color: #0d3b65; border: 1px solid #486B8A; paddin .aloittamatta { background: #ffff88; - width:150px; } .osittain { background: #fc3; - width:150px; } .syotetty { background: #b9f73e; - width:150px; } .tarkistettu { background: #679b00; - width:150px; } .virhe { background: #ff4f00; - width:150px; } #tulostaulukko_screen { @@ -473,6 +515,27 @@ a.sitetoolbarnavactive:hover { color: #0d3b65; border: 1px solid #486B8A; paddin #tulostaulukko_screen td { vertical-align:top; + padding-right:10px; +} + +#tulostaulukko_screen .odd { + background: #faffda; +} + +#tulostaulukko_screen .even { + +} + +#vartiot td:first-child { + font-weight: bold; +} + +.right { + text-align: right; +} + +.left { + text-align: left; } #sarjakohtaiset_tulokset td @@ -498,3 +561,13 @@ td.th_erotin { .capitalize {text-transform:capitalize;} +.jgrowl-{} +.jgrowl-debug{} +.jgrowl-info{} +.jgrowl-success{} +.jgrowl-warning{ + background: #300!important; +} +.jgrowl-error{ + background: #300!important; +} diff --git a/web/media/static.css b/web/media/static.css index db82cbc4..84d05703 100644 --- a/web/media/static.css +++ b/web/media/static.css @@ -147,7 +147,7 @@ font: menu; { padding:10px 0; /* CC padding */ - width:100%; +/* width:100%; */ } #left diff --git a/web/requiremets.txt b/web/requiremets.txt new file mode 100644 index 00000000..0dbf24c8 --- /dev/null +++ b/web/requiremets.txt @@ -0,0 +1,2 @@ +Django==1.11 +pytz==2019.3 diff --git a/web/settings.py b/web/settings.py index ae068094..c1b038f0 100644 --- a/web/settings.py +++ b/web/settings.py @@ -1,15 +1,14 @@ +# encoding: utf-8 import os -hakemisto=os.path.normpath(os.path.dirname(__file__)) -tarkistus= os.getcwd() +hakemisto = os.path.normpath(os.path.dirname(__file__)) +tarkistus = os.getcwd() -DEBUG = True -TEMPLATE_DEBUG = DEBUG +DEBUG = False RECORDING=False if not hakemisto == tarkistus : #Viittaisi siihen etta kyseessa on apachen alta toimiva, joten pakotetaan debugit pois DEBUG=False - TEMPLATE_DEBUG = False ADMINS = ( #('frans korhonen', 'frans.korhonen@gmail.com'), @@ -17,12 +16,21 @@ MANAGERS = ADMINS +''' DATABASE_ENGINE = 'django.db.backends.sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. DATABASE_NAME = hakemisto + '/tupa.db' # Or path to database file if using sqlite3. DATABASE_USER = '' # Not used with sqlite3. DATABASE_PASSWORD = '' # Not used with sqlite3. DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3. DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3. +''' +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(hakemisto, 'tupa.db'), + } +} + # Cache TAUSTALASKENTA = False # Tulokset lasketaan taustalla (Vaatii toimiakseen tomivan cachekokoonpanon) @@ -39,14 +47,14 @@ TIME_ZONE = 'Europe/Helsinki' # Language code for this installation. -LANGUAGE_CODE = 'fi-FI' +LANGUAGE_CODE = 'en-US' SITE_ID = 1 # If you set this to False, Django will make some optimizations so as not # to load the internationalization machinery. -USE_I18N = True - +USE_I18N = False +''' # Absolute path to the directory that holds media. # Example: "/home/media/media.lawrence.com/" MEDIA_ROOT = hakemisto + "/media/" @@ -56,7 +64,7 @@ # URL that handles the media served from MEDIA_ROOT. # Example: "http://media.lawrence.com" MEDIA_URL = '' - +''' FILE_UPLOAD_HANDLERS= ("django.core.files.uploadhandler.MemoryFileUploadHandler", "django.core.files.uploadhandler.TemporaryFileUploadHandler",) @@ -68,41 +76,73 @@ # Make this unique, and don't share it with anybody. SECRET_KEY = 'shbtq($_^om(xep=5f97k2+ntb3!cqn+)%8r#s6udzqnhj$5p6' +''' # List of callables that know how to import templates from various sources. TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source', # 'django.template.loaders.eggs.load_template_source', ) - +''' +''' MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', ) - +''' ROOT_URLCONF = 'urls' +''' TEMPLATE_DIRS = ( hakemisto + '/templates', # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. ) +''' INSTALLED_APPS = [ 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.messages', 'django.contrib.sessions', - 'django.contrib.sites', + #'django.contrib.sites', 'tupa', + 'user_management', 'django.contrib.admin', #'django.contrib.formtools', 'django.template', - 'django.contrib.databrowse' + #'django.contrib.databrowse' + 'django.contrib.staticfiles', +] +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [hakemisto + '/templates'], + 'APP_DIRS': True, + 'OPTIONS': { + 'debug': DEBUG, + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, ] LOGIN_URL = ('/kipa/') @@ -110,3 +150,42 @@ TEST_RUNNER = ('tupa.tests.run_one_fixture') + +STATIC_URL = '/kipamedia/' +STATIC_ROOT = os.path.join(hakemisto, "media") +''' +STATICFILES_DIRS = [ + os.path.join(hakemisto, "media"), +] +''' +#ALLOWED_HOSTS = ['127.0.0.1'] # Määritä tähän kaikki palvelimesi IP-osoitteet pilkulla erotettuna +ALLOWED_HOSTS = ['*'] # Salli kaikki yhteydet + +WSGI_APPLICATION = 'wsgi.application' + +DATA_UPLOAD_MAX_NUMBER_FIELDS = None # maaritaVartiot floodaa GET/POST:in + +# Password validation +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators +# Ottamalla käyttöön salasanan laatusäännöt, järjestelmä pakottaa käyttäjät käyttämään turvallisempia salasanoja +''' +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] +''' +#HTTPS is not availible on devserver +#HTTPS would need sertificates to the web server program +#SESSION_COOKIE_SECURE = True +#CSRF_COOKIE_SECURE = True +#SECURE_SSL_REDIRECT = True diff --git a/web/settings_dev.py b/web/settings_dev.py new file mode 100644 index 00000000..51a43196 --- /dev/null +++ b/web/settings_dev.py @@ -0,0 +1,45 @@ +# encoding: utf-8 +from settings import * + +#Django testiserverillä otetaan käyttöön myös seuraavat asetukset: +# python -Wall manage.py runserver + + +DEBUG = True +#RECORDING=False + +''' +# Cache +TAUSTALASKENTA = False # Tulokset lasketaan taustalla (Vaatii toimiakseen tomivan cachekokoonpanon) +CACHE_TULOKSET = False # Etsitaanko tuloksia cachesta +CACHE_TULOKSET_TIME = 1800 # Tuloscachen voimassaoloaika viimeisesta nayttokerrasta. [s] +#CACHE_BACKEND = 'locmem:///' # Cache system for developement +#CACHE_BACKEND = 'locmem:///' # Cache system for developement +CACHE_BACKEND = 'db://tupa_tulos_cache' +if not CACHE_TULOKSET : + CACHE_BACKEND = 'dummy:///' # No cache in use + TAUSTALASENTA = False +''' +INSTALLED_APPS += [ + + #'debug_toolbar', #https://django-debug-toolbar.readthedocs.io/en/stable/installation.html +] + +MIDDLEWARE += [ + + #'debug_toolbar.middleware.DebugToolbarMiddleware', #https://django-debug-toolbar.readthedocs.io/en/stable/installation.html +] + +STATIC_ROOT = None + +STATICFILES_DIRS = [ + os.path.join(hakemisto, "media"), +] + +INTERNAL_IPS = [ + '127.0.0.1' +] + +SESSION_COOKIE_SECURE = False +CSRF_COOKIE_SECURE = False +SECURE_SSL_REDIRECT = False diff --git a/web/templates/tupa/base.html b/web/templates/tupa/base.html index d657ff3d..44952871 100644 --- a/web/templates/tupa/base.html +++ b/web/templates/tupa/base.html @@ -6,13 +6,13 @@ @@ -35,19 +35,7 @@ document.getElementById(id).style.display = visibility; } -{% if talletettu %} - - -{% endif %} - +{% include "tupa/messages.html" %} @@ -56,19 +44,20 @@
-
@@ -76,15 +65,19 @@
-
- Etusivulle - Syötä suorituksia - Syötä suorituksia (tarkistus) - Tulokset - Laskennan tilanne - Määrittele vartiot - Määrittele tehtävät - Apua +
+ {% if kisa_nimi %} + Etusivulle + Syötä suorituksia + Syötä suorituksia (tarkistus) + Tulokset + Laskennan tilanne + Määrittele vartiot + Määrittele tehtävät + Apua + {% else %} + Kisan valinta + {% endif %}
diff --git a/web/templates/tupa/base_riisuttu.html b/web/templates/tupa/base_riisuttu.html index 798a9a90..ef83dd62 100644 --- a/web/templates/tupa/base_riisuttu.html +++ b/web/templates/tupa/base_riisuttu.html @@ -19,18 +19,7 @@ document.getElementById(id).style.display = visibility; } -{% if talletettu %} - - -{% endif %} +{% include "tupa/messages.html" %} diff --git a/web/templates/tupa/forms/aika_vali.html b/web/templates/tupa/forms/aika_vali.html index c17abc66..ae1de9c4 100644 --- a/web/templates/tupa/forms/aika_vali.html +++ b/web/templates/tupa/forms/aika_vali.html @@ -1,9 +1,8 @@ -
- Alkuaika ja loppuaika {{kali_vihje_a.errors}} + Syötteen 1 kuvaus (esim. Alkuaika): - diff --git a/web/templates/tupa/forms/arviointi.html b/web/templates/tupa/forms/arviointi.html index 655d2c1d..3430887e 100644 --- a/web/templates/tupa/forms/arviointi.html +++ b/web/templates/tupa/forms/arviointi.html @@ -1,26 +1,15 @@ -
- Arviointi - - - - - - -
-

Käytössa:

-

- {{oikea.errors}} - -Oikea vastaus:
-

- -Jos kyseessä on tavallinen tehtävä, tätä ei valita. -Mikäli kyseessä on arviointitehtävä, tulee tässä ilmoittaa tehtävän oikea vastaus. -Tällöin vartioiden suoritukset täman arvon molemmin puolin ovat samanarvoisia.

-
+
+ Arviointi + + + + + Käytössa:
+ Oikea vastaus: + {{oikea.errors}}
diff --git a/web/templates/tupa/forms/funktiot_apu.html b/web/templates/tupa/forms/funktiot_apu.html index 6f22f760..31735414 100644 --- a/web/templates/tupa/forms/funktiot_apu.html +++ b/web/templates/tupa/forms/funktiot_apu.html @@ -1,4 +1,4 @@ - diff --git a/web/templates/tupa/forms/kisa_piste.html b/web/templates/tupa/forms/kisa_piste.html index 1d0ed5ec..1981fd01 100644 --- a/web/templates/tupa/forms/kisa_piste.html +++ b/web/templates/tupa/forms/kisa_piste.html @@ -1,6 +1,7 @@ {{kali_vihje_a.errors}} -Syötteen kuvaus :

+ +Syötteen kuvaus:

diff --git a/web/templates/tupa/forms/kokonais_aika.html b/web/templates/tupa/forms/kokonais_aika.html index 123c89b7..b2ca82f4 100644 --- a/web/templates/tupa/forms/kokonais_aika.html +++ b/web/templates/tupa/forms/kokonais_aika.html @@ -2,7 +2,8 @@ {{kali_vihje_a.errors}} -Syötteen kuvaus : diff --git a/web/templates/tupa/forms/maksimi_suoritus.html b/web/templates/tupa/forms/maksimi_suoritus.html index 83e98095..b725a020 100644 --- a/web/templates/tupa/forms/maksimi_suoritus.html +++ b/web/templates/tupa/forms/maksimi_suoritus.html @@ -1,44 +1,28 @@
+ Maksimisuoritus + + + + + Parhaat pisteet saa:
+ pienin
+ suurin
+ {%if vapaa %} kaava: + + + + {%else%} kiinteä: {% endif %} + + {{kiintea.errors}}
- Maksimisuoritus - - - - - - -
- - -Parhaat pisteet saa:
- pienin
- suurin
- {%if vapaa %} kaava: - - - -{%else%} kiinteä: {% endif %} - - {{kiintea.errors}} - -
- - -Montako kisapistettä jaetaan: - - {{jaettavat.errors}} - - -
-Tässä kerrotaan suoritus, jolla saa maksimipisteet. Tämä voi olla vartioiden suorituksista pienin, suurin tai jokin kiinteä luku. Mikäli kyseessä on arviointi valitse pienin. -
- + Montako kisapistettä jaetaan: + + {{jaettavat.errors}}
- diff --git a/web/templates/tupa/forms/nolla_suoritus.html b/web/templates/tupa/forms/nolla_suoritus.html index d1901d53..bf854d87 100644 --- a/web/templates/tupa/forms/nolla_suoritus.html +++ b/web/templates/tupa/forms/nolla_suoritus.html @@ -1,77 +1,49 @@
- Nollasuoritus - -

- Tässä kerrotaan suoritus, jolla saa nolla pistettä. - Tämä voi olla jokin kiinteä suoritus tai interpoloinnissa keskimmäisestä tuloksesta laskettu. -

+ Nollasuoritus + + + + - - - - - - -
- - - - -
- {%if vapaa %} Vapaa: {%else%} Kiinteä {% endif %} -

- - {%if vapaa %} kaava: - - - - {%else%} Kiinteä suoritus: {% endif %} - - {{nollan_kaava.errors}} - -
-

-
-
-
- Kerroin keskimmäisestä tuloksesta +
+ {%if vapaa %} Vapaa: {%else%} Kiinteä {% endif %} -

- - - - -1.5 (pienin tulos saa parhaat pisteet)
- -0.5 (suurin tulos saa parhaat pisteet)
- + + {%if vapaa %} kaava: + + + + {%else%} Kiinteä suoritus: {% endif %} +
+ {{nollan_kaava.errors}} +

-checked="checked" -{% endif %} -{% endifnotequal %} -{% endifnotequal %} -{% endifnotequal %}/> - -muu: +
+ Kerroin keskimmäisestä tuloksesta + + + 1.5 (pienin tulos saa parhaat pisteet)
+ + 0.5 (suurin tulos saa parhaat pisteet)
+ - {{muu_kerroin.errors}} - - -

+ checked="checked" + {% endif %} + {% endifnotequal %} + {% endifnotequal %} + {% endifnotequal %}/> + + muu: + + {{muu_kerroin.errors}}
-
- +
diff --git a/web/templates/tupa/forms/osa_tehtava.html b/web/templates/tupa/forms/osa_tehtava.html index dc083997..c8006ae9 100644 --- a/web/templates/tupa/forms/osa_tehtava.html +++ b/web/templates/tupa/forms/osa_tehtava.html @@ -33,6 +33,7 @@

{{ heading }}

{%ifequal sarake.tyyppi tyyppi %} checked='checked' {% endifequal %} /> {{sarake.otsikko}}     {% endfor %} +

{% for sarake in taulukko%}