bygdis.fi

git clone https://git.tarina.org/bygdis.fi
Log | Files | Refs | README

commit 52420bbf60e935faa61148491565d93fee784a81
parent 3f0219aeca1414a794f0429550dc4c0273a26adf
Author: rob <rob@tarina.org>
Date:   Tue,  7 Mar 2023 20:28:46 +0200

myky nytt

Diffstat:
Mpublic_html/html/admin.html | 47+++++++++++++++++++++++++++++++++++++++++++++--
Mpublic_html/html/base.html | 2+-
Apublic_html/html/boka.html | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Mpublic_html/html/dorrkoder.html | 34++++++++++++++++------------------
Mpublic_html/html/event.html | 2+-
Mpublic_html/html/index.html | 7++++---
Mserver.py | 136++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
Asettings.py | 6++++++
8 files changed, 236 insertions(+), 47 deletions(-)

diff --git a/public_html/html/admin.html b/public_html/html/admin.html @@ -1,17 +1,60 @@ -$def with (anslagstavla, saysomething) +$def with (anslagstavla, saysomething, bokningar, doordebug, str, log, getDorrkoduser,roskis) <div id="container"> <div id="default"> <br> <h1>Bygdis.fi</h1> <a href="/event">Event</a> | <a href="/protokoll">Protokoll</a> | <a href="/static/mlinvoice">Fakturera</a> | <a href="/logout">Logga ut</a><br> - <a href="/bilder">Byyns fotoalbum</a> | <a href="/dorrkoder">Dörrkoder</a> + <a href="/bilder">Byyns fotoalbum</a> | <a href="/dorrkoder">Dörrkoder</a> | <a href="/boka">Boka</a> <br> + <br> + $if doordebug.doorstate == 'False': + Dörren är stängd. <br> + $doordebug.datum.strftime('%d-%m-%y %H:%M') + <br> + Senaste i dörrloggen<br> + $for i in log: + $i.datum.strftime('%d-%m-%y %H:%M') + $i.dorrkod + $getDorrkoduser(i.dorrkod) + <br> + <br> + <a href="/admin?emptytrash=now">Skicka efter roskis tömning</a> <br> + Senast skickat: $roskis.datum.strftime('%d-%m-%y %H:%M') + + <h2>bokningar</h2> + $for i in bokningar: + <div class="anslagstavla" id="$i.bokningshash"> + <h3>$i.datumtid[:-8]</h3> + <b>$i.namn</b><br> + evenemang: $i.event <br> + $i.boka<br> + epost: $i.epost <br> + tfn: $i.telefon <br> + villkor godkända: $i.villkor <br> + $i.privat <br><br> + <a href="/admin?approve=$i.id" method="post">Godkänn</a> | + <a href="/boka?id=$i.bokningshash">Ändra</a> | + <a href="/admin?sendrules=$i.id">Skicka regler</a> | + <a href="/admin?fakturera=$i.id">Fakturera</a> | + <a href="/admin?doorcode=$i.id">Skicka dörrkod</a> | + <a href="/admin?remove=$i.id">Radera</a> + <br> + <br> + status: + $if i.approved: + godkändes $i.approved och lades till i event + $if i.doorcode: + dörrkod $i.doorcode har skickats + $if i.faktura: + faktura har skickats $i.faktura + </div> <div class="anslagstavla"> <h4>Säg någå</h4> <form method="POST"> $:saysomething.render() </form> </div> + $for i in anslagstavla: <div class=anslagstavla> <h3>$i.datumtid[8:10] $i.datumtid[5:7] kl. $i.datumtid[10:16]</h3> diff --git a/public_html/html/base.html b/public_html/html/base.html @@ -5,7 +5,7 @@ $def with (content) <title>Hommansby Ungdomsförening</title> <meta name="description" content="Hommansby Ungdomsförening. Bygdegården." /> <meta name="viewport" content="width=device-width; initial-scale=1.0;"> - <link rel="stylesheet" href="/static/leipuri.css" type="text/css" rel="stylesheet"/> + <link rel="stylesheet" href="/static/leipuri.css?v=123" type="text/css" rel="stylesheet"/> <meta name="google-site-verification" content="88dInqkR1qhmPAMVnlopcopq6t_5-6RQ5_VEl5ja6GA" /> </HEAD> <body> diff --git a/public_html/html/boka.html b/public_html/html/boka.html @@ -0,0 +1,49 @@ +$def with (boka) +<div id="container"> +<div id="default"> +<h2>Boka Bygdegården</h2> +<pre> +<b>Villkor och regler.</b> + +1. Max 230 personer får vistas samtidigt i lokalen. + +2. Rökning förbjuden inomhus. Ute på gården intill ingången finns kärl för fimpar. + +3. Fester kräver uppvisande av nöjestillstånd. Undantag är familjefester som tex. 50-årskalas, bröllop och dop där inget nöjestillstånd krävs. + +4. Den som hyr lokalen ansvarar för att lokalen och gårdsplanen är städad senast dagen efter tillställningen. + +<b>Städregler</b> + +1. Bord och stolar torkas och placeras på samma sätt som vid uthyrning av lokalen. + +2. Kökets arbetsytor torkas. + +3. Golven sopas med borste. + +4. Golvet i köket, serveringrummet, hallen och toaletter skall våttorkas. + +<u>5. Salsgolvet och scenen tvättas med lätt fuktad trasa!</u> + +6. Sopor sorteras i paff, glas och metall som förs till återvinningkärlen på gårdsplanen. Övriga sopor förs till sopkärlet vid köksingången. + +<b>Övriga villkor</b> + +1. Värmepumparnas inställningar skall sättas till ursprunglit läge efter användning. + +2. Eventuella skador på lokalen eller lösöret meddelas till lokalens bokningsansvariga (tel.0447624040) senast följande dag och skadorna ersättas till sitt fulla pris på räkning. + +3. Tillställningar som avbokas två veckor före tillställningen faktureras inte. Tillställningar som avbokas senare än två veckor före tillställningen faktureras till halva priset. Oavbokade tilställningar faktureras till fullt pris. + +4. Ifall lokalen lämnas ostädad, faktureras hyresgästen en städavgift. Denna avgift beror på städningens omfattning och fastställs enligt rådande avtal med städfirman som föreningen anlitar. +</pre> +<h2>Boknings formulär</h2> +<div id="addevent"> +<form method="POST"> +$:boka.render() +</form> +</div> +<b><p></p></b> +</div> +</div> +</div> diff --git a/public_html/html/dorrkoder.html b/public_html/html/dorrkoder.html @@ -2,26 +2,24 @@ $def with (dorrkoder, log, getDorrkoduser) <br> <h1>Bygdis.fi</h1> +<a href="/admin"><<-----tibaks</a> <h2>Dörrkoder</h2> <a href="/nydorrkod">Lägg till</a> -<table style="max-width:800px"> +<br> +<br> $for i in dorrkoder: - <tr> - <th>$i.dorrkod</th> - <th>$i.name</th> - <th>$i.mail</th> - <th>$i.datum.strftime('%d-%m-%y %H:%M')</th> - <th><form action="/dorrkoder/$i.id" method="post"><input type="submit" value="radera"></form></th> - <th><form action="/dorrkoder/$i.id" method="post"><input type="submit" value="uppdatera"></form></th> - </tr> + <b>$i.dorrkod</b> <u>$i.name</u> | $i.mail | $i.datum.strftime('%d-%m-%y %H:%M') | <a href="/dorrkoder?radera=$i.id" >radera</a> | + <a href="/dorrkoder?uppdatera=$i.id">uppdatera</a> + <a href="/dorrkoder?fakturera=$i.id">fakturera</a> + <hr> + <br> </table> -<h2>Logg</h2> -<table style="max-width:800px"> +<h2>Dörr logg</h2> +<br> +Senaste i dörrloggen<br> $for i in log: - <tr> - <th>$i.datum.strftime('%d-%m-%y %H:%M')</th> - <th>$i.dorrkod</th> - <th>$getDorrkoduser(i.dorrkod)</th> - </tr> -</table> - + $i.datum.strftime('%d-%m-%y %H:%M') + $i.dorrkod + $getDorrkoduser(i.dorrkod) + <br> + diff --git a/public_html/html/event.html b/public_html/html/event.html @@ -8,7 +8,7 @@ $var upcomingevents = upcomingevents <a href="/admin">Tillbaka</a> | <a href="/addevent">Lägg till</a> | <a href="/logout">Logga ut</a> $for i in upcomingevents: <div id=event> - <h4>$i.event</h4>$i.veckodag $i.datumtid[8:10] $i.datumtid[5:7] kl. $i.datumtid[10:16] $i.admin <br> $i.info<a href="/addevent?id=$i.id">Ändra/Muuta</a> <a href="/removeevent/$i.id" method="post">Delete</a> + <h4>$i.event</h4>$i.veckodag $i.datumtid[8:10] $i.datumtid[5:7] kl. $i.datumtid[10:16] $i.admin <br> $i.info <br><a href="/addevent?id=$i.id">Ändra/Muuta</a> <a href="/addevent?id=$i.id&copyevent=$i.id">Kopiera/Kopio</a> <a href="/removeevent/$i.id" method="post">Delete</a> </div> </div> </div> diff --git a/public_html/html/index.html b/public_html/html/index.html @@ -7,7 +7,8 @@ $if displayname != '': $if displayname == '': <b><a href="/login">Logga in / kirjaudu sisään </a></b> <br> -<h1>Bygdis.fi</h1> +<h1>bygdis.fi</h1> +<h2>Hommansby Ungdomsförening</h2> <p><a href="#styrelsen">styrelsen</a> | <a href="#bokningar">bokningar</a> | <a href="/om">om sidan</a> | <a href="/bilder">Byyns fotoalbum</a> $for i in upcomingevents: <div class=anslagstavla> @@ -19,9 +20,9 @@ $if displayname == '': <div id="styrelsen"> <h1>Styrelsen</h1> -Lars-Erik Kullström | ordförande </a><br> +Mia Wigren | ordförande </a><br> Robin Bäckman | sekreterare | <a href="tel:0447624040">0447624040</a><br> -Benjamin Bäckman, Frieda Ramstedt, Johanna Granqvist, Tom Granqvist, Mia Wigren<br> +Ronja Wiik, Benjamin Bäckman, Frieda Ramstedt, Johanna Granqvist, Tom Granqvist, Lars-Erik Kullström<br> </div> <div id="bokningar"> <h1>Bokningar</h1> diff --git a/server.py b/server.py @@ -16,6 +16,7 @@ import bcrypt import sys basedir = os.path.dirname(os.path.realpath(__file__)) sys.path.append(basedir) +import settings urls = ( "/", "index", @@ -38,6 +39,7 @@ urls = ( "/tuning?", "tuning", "/senaste", "senaste", "/admin", "admin", + "/boka", "boka", "/dorrkoder?", "dorrkoder", "/nydorrkod?", "nydorrkod", "/dorrkoderapi?", "dorrkoderapi", @@ -48,6 +50,8 @@ urls = ( "/nope", "nope" ) +postadmin = settings.postadmin +postadmin_signature = settings.postadmin_signature render = web.template.render(basedir + "/public_html/html/", base="base") render2 = web.template.render(basedir + "/public_html/html/", base="base2") render3 = web.template.render(basedir + "/public_html/html/", base="base3") @@ -87,6 +91,18 @@ def nyevent(id, datumtid, event, admin_visible, info): print("event added to database") return +def copyevent(id, datumtid, event, admin_visible, info): + veckodagar = u'Måndag', u'Tisdag', u'Onsdag', u'Torsdag', u'Fredag', u'Lördag', u'Söndag' + veckodag = datumtid.weekday() + db.insert('kalender', datumtid=datumtid, veckodag=veckodagar[veckodag], event=event, admin=admin_visible, info=info) + print("event added to database") + return + +def getbokningar(): + bokningar = db.query("SELECT * FROM bokningar ORDER BY datumtid DESC") + #events = db.select('kalender', what='id, datumtid, event', order='datumtid ASC') + return bokningar + def getposts(): posts = db.query("SELECT * FROM posts ORDER BY datumtid DESC") #events = db.select('kalender', what='id, datumtid, event', order='datumtid ASC') @@ -166,8 +182,11 @@ def addDorrkod(dorrkod, name, mail): def dorrLogger(dorrkod): db.insert('dorrlogger', dorrkod=dorrkod, datum=datetime.datetime.now()) -def getDorrlog(): - log=db.query("SELECT * FROM dorrlogger ORDER BY datum DESC") +def getDorrlog(limit): + if limit == 0: + log=db.query("SELECT * FROM dorrlogger ORDER BY datum DESC") + else: + log=db.query("SELECT * FROM dorrlogger ORDER BY datum DESC LIMIT "+str(limit)) return log def getDorrkoduser(dorrkod): @@ -184,8 +203,8 @@ def getDorrkoder(): def sendmail(email, subject, msg): #Send mail - echomsg = subprocess.Popen(('echo', msg), stdout=subprocess.PIPE) - sendmsg = subprocess.check_output(('mail', '-r', 'rob@bygdis.fi', '-s', subject, email), stdin=echomsg.stdout) + echomsg = subprocess.Popen(('echo', msg+'\n'+postadmin_signature), stdout=subprocess.PIPE) + sendmsg = subprocess.check_output(('mail', '-r', postadmin, '-s', subject, email), stdin=echomsg.stdout) echomsg.wait() #subprocess.call(['echo', msg, '|', 'mail', '-r', 'rob@tarina.org','-s', subject, email]) @@ -242,26 +261,94 @@ class admin(): def GET(self): print(session.login) if session.login == 5: + doordebug = db.select('doordebug')[0] saysomething = self.form() anslagstavla = getposts() - return render2.admin(anslagstavla, saysomething) + bokningar = getbokningar() + roskis=db.select('roskis')[0] + i = web.input(approve=None,sendrules=None,fakturera=None,doorcode=None,remove=None,emptytrash=None) + if i.approve != None: + #Send mail to admin + bokning = db.select('bokningar', where='id="'+i.approve+'"')[0] + msg = "Bokning godkänd av " + bokning.namn + ' epost: ' + bokning.epost + sendmail(postadmin, 'Bokning godkänd!', msg) + #Send mail to user + msg = "Hej " + bokning.namn + " tack din bokning godkändes, du får fakturan inom kort och en dörrkod när fakturan är betald. Tack!" + sendmail(bokning.epost, 'Bokning av Bygdegården lyckades och är godkänd', msg) + db.update('bokningar', where='id="'+i.approve+'"', approved=datetime.datetime.now()) + raise web.seeother('/admin?kakka') + if i.sendrules != None: + raise web.seeother('/admin?kakka') + if i.fakturera != None: + raise web.seeother('/admin?kakka') + if i.doorcode != None: + raise web.seeother('/admin?kakka') + if i.remove != None: + raise web.seeother('/admin?kakka') + if i.emptytrash == 'now': + db.update('roskis', where='id=1',datum=datetime.datetime.now()) + raise web.seeother('/admin') + log = getDorrlog(10) + return render2.admin(anslagstavla,saysomething,bokningar,doordebug,str,log,getDorrkoduser,roskis) else: raise web.seeother('/login') def POST(self): if session.login == 5: + i = web.input(post=None,approve=None,sendrules=None,fakturera=None,doorcode=None,remove=None) saysomething = self.form() - if not saysomething.validates(): - return render2.admin(anslagstavla, saysomething) - else: - i = web.input() + if i.post != None: print('ADDDDDDDDDDDDDING TO database post ' + i.post) now = datetime.datetime.now() print('ADDDDDDDDDDDDDING TO database date' + str(now)) nypost(now, i.post) - raise web.seeother('/admin') + raise web.seeother('/admin') else: raise web.seeother('/login') +class boka(): + form = web.form.Form( + web.form.Textbox('year', web.form.notnull, web.form.regexp('\d+', 'yyyy'), description="år:"), + web.form.Textbox('day', web.form.notnull, web.form.regexp('\d+', 'dd'), description="dag:", autofocus="autofocus"), + web.form.Textbox('month', web.form.notnull, web.form.regexp('\d+', 'MM'), description="månad:"), + web.form.Dropdown('boka', [u'Veckoslut hela huset (medlem) 200€', u'Veckoslut hela huset (icke medlem) 350 €', u'Veckoslut serveringsrummet och kök (medlem) 100€', u'Veckoslut serveringsrummet och kök (icke medlem) 150€', u'En dag hela huset (medlem) 100€', u'En dag hela huset (icke medlem) 150€', u'En dag serveringsrummet och kök (medlem) 80€', u'En dag serveringsrummet och kök (icke medlem) 120€'], web.form.notnull, description="bokning"), + web.form.Textarea('event', web.form.notnull, description="beskrivning:"), + web.form.Textbox('namn', web.form.notnull, description="namn:"), + web.form.Textbox('epost', web.form.notnull, description="e-post:"), + web.form.Textbox('telefon', web.form.regexp('\d+', 'nummer tack'), description="telefon:"), + web.form.Radio('villkor', [u'Nej', u'Ja'], web.form.notnull, description="Jag godkänner alla regler och villkor."), + web.form.Radio('privat', [u'Privat', u'Offentligt'], web.form.notnull, description="Evenemanget som ordnas är:"), + web.form.Button('Skicka')) + def GET(self): + i = web.input(id=None, cp=None) + form_boka = self.form() + if i.id==None: + now = datetime.datetime.now() + form_boka.fill(year=now.year, month=now.month, day=now.day) + else: + event = db.select('bokningar', where='bokningshash="'+i.id+'"')[0] + now=datetime.datetime.strptime(event.datumtid, '%Y-%m-%d %H:%M:%S') + form_boka.fill(year=now.year, month=now.month, day=now.day, boka=event.boka, event=event.event, namn=event.namn, epost=event.epost, telefon=event.telefon, villkor=event.villkor, privat=event.privat) + return render.boka(form_boka) + def POST(self): + form_boka = self.form() + if not form_boka.validates(): + return render.boka(form_boka) + else: + i = web.input(id=None, copyevent=None) + try: + year = int(i.year) + month = int(i.month) + day = int(i.day) + datum = datetime.datetime(year, month, day) + except ValueError: + return render.nope() + if i.id == None: + bokningshash = hashlib.md5(str(random.getrandbits(256)).encode('utf-8')).hexdigest() + db.insert('bokningar', datumtid=datum, boka=i.boka, event=i.event, namn=i.namn, epost=i.epost, telefon=i.telefon, villkor=i.villkor, privat=i.privat, bokningshash=bokningshash) + else: + db.update('bokningar', where='bokningshash="'+i.id+'"', datumtid=datum, boka=i.boka, event=i.event, namn=i.namn, epost=i.epost, telefon=i.telefon, villkor=i.villkor, privat=i.privat) + raise web.seeother('/admin') + class event(): def GET(self): if session.login == 5: @@ -273,8 +360,8 @@ class event(): class addevent(): form = web.form.Form( web.form.Textbox('year', web.form.notnull, web.form.regexp('\d+', 'yyyy'), description="år:"), - web.form.Textbox('month', web.form.notnull, web.form.regexp('\d+', 'MM'), description="månad:"), web.form.Textbox('day', web.form.notnull, web.form.regexp('\d+', 'dd'), description="dag:", autofocus="autofocus"), + web.form.Textbox('month', web.form.notnull, web.form.regexp('\d+', 'MMM'), description="månad:"), web.form.Textbox('tid', web.form.notnull, web.form.regexp('^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$', 'Skriv tiden såhär 07:20'), description="klockslag:"), web.form.Dropdown('upprepa', [u'Nej', u'Varje vecka', u'Varannan vecka', u'Varje månad'], web.form.notnull, description="återkommande"), web.form.Textbox('antal', web.form.regexp('\d+', 'nummer tack'), description="hur många gånger:"), @@ -283,7 +370,7 @@ class addevent(): web.form.Textarea('admin', description="synligt för admin:"), web.form.Button('skicka')) def GET(self): - i = web.input(id=None) + i = web.input(id=None, cp=None) if session.login == 5: kalender = self.form() if i.id==None: @@ -302,7 +389,7 @@ class addevent(): if not kalender.validates(): return render.addevent(kalender) else: - i = web.input(id=None) + i = web.input(id=None, copyevent=None) try: tidh = int(i.tid[:2]) tidm = int(i.tid[-2:]) @@ -328,7 +415,10 @@ class addevent(): manydatum.append(datum + datetime.timedelta(days=c)) c = c + dayz for d in manydatum: - nyevent(i.id, d, i.event, i.admin, i.info) + if copyevent != None: + copyevent(i.id, d, i.event, i.admin, i.info) + else: + nyevent(i.id, d, i.event, i.admin, i.info) return web.seeother('/event') else: raise web.seeother('/login') @@ -353,8 +443,6 @@ class undo(): else: raise web.seeother('/login') - - class editevent(): def POST(self): s = web.input().signal @@ -440,7 +528,7 @@ class forgotpass(): elif i.error == 'nej': fejl = 'nej hörru dedär gaar inga / ei käy' elif i.error == 'stopresetpass': - fejl = 'Nytt lösenord ha skickats åt dej! int ha du väl nu igen tappat bort ditt lösen? hmm.. om de e problematiskt ta kontakt med rob@bygdis.fi / sama på finska' + fejl = 'Nytt lösenord ha skickats åt dej! int ha du väl nu igen tappat bort ditt lösen? hmm.. om de e problematiskt ta kontakt med '+postadmin+' / sama på finska' if session.login < 3: loginform = self.form() return render.forgotpass(loginform, fejl) @@ -538,7 +626,7 @@ class register(): adduser(i.user, i.password, i.mail.lower()) #Send mail to Madbaker msg = "Wowowowoweeewaaa! Ny användare på bygdis.fi! " + i.user + ' ' + i.mail - sendmail('rob@bygdis.fi', 'Wowowoweewaaa!', msg) + sendmail(postadmin, 'Wowowoweewaaa!', msg) #Send mail to new user msg = "Gratulis " + i.user + ", du har nu ett konto opa bygdis.fi! Logga in med användarnamn å lösenord på sidan https://bygdis.fi/login" sendmail(i.mail, 'Byyns eji fotoalbum', msg) @@ -588,9 +676,9 @@ class nydorrkod(): addDorrkod(dorrkod, i.namn, i.mail.lower()) #Send mail to Madbaker msg = "Wowowowoweeewaaa! Ny dörrkod! " + i.namn + ' ' + i.mail + ' ' + str(dorrkod) - sendmail('rob@bygdis.fi', 'Wowowoweewaaa!', msg) + sendmail(postadmin, 'Wowowoweewaaa!', msg) #Send mail to new user - msg = "Gratulis " + i.namn + ", du har en dörrkod ti bygdis: " + str(dorrkod) + msg = "Gratulis " + i.namn + ", du har en dörrkod till Bygdegården: " + str(dorrkod) sendmail(i.mail, 'Dörrkod till Bygdegården', msg) return web.seeother('/dorrkoder') @@ -598,9 +686,13 @@ class dorrkoder(): def GET(self): if session.login == 5: dorrkoder = getDorrkoder() - log = getDorrlog() + log = getDorrlog(0) + i = web.input(radera=None,uppdatera=None,fakturera=None,emptytrash=None) + if i.radera != None: + db.delete('dorrkoder', where='id="'+i.radera+'"') + raise web.seeother('/dorrkoder') print(dorrkoder) - return render.dorrkoder(dorrkoder, log, getDorrkoduser) + return render.dorrkoder(dorrkoder,log,getDorrkoduser) else: web.seeother('/') diff --git a/settings.py b/settings.py @@ -0,0 +1,6 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + +postadmin="info@bygdis.fi" +postadmin_signature="-~-\nWebadmin\nHommansby Ungdomsförening r.f.\ninfo@bygdis.fi\n+358 44 7624 040" +