Ejemplo n.º 1
0
def index(req):
	"""Näytä listaus tietokannassa olevista resepteistä. Reseptiä klikkaamalla pääsee muokkaussivulle."""
	req.content_type = "application/xhtml+xml; charset=utf-8"

	dom = minidom.parse(htmlpath)

	dom_reseptit = domutil.getContentElementById("reseptit", dom)
	dom_reseptilista = dom.createElement("ul")
	dom_reseptit.appendChild(dom_reseptilista)

	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()

	cmd = """
		select re.nimi as nimi, re.reseptiid as id, oh.ohjeteksti as teksti
		from resepti re
		left outer join ohje oh
		on re.reseptiid = oh.reseptiid
		order by re.nimi, re.reseptiid collate nocase;
	"""
	cur.execute(cmd)

	# Lisää reseptien vaiheet sivulle listana. Jos vaihe on reseptin ensimmäinen, luodaan uusi reseptin nimellä otsikoitu taso.
	prev_row = (None, None)
	for row in cur:
		curr_row = (row["nimi"], row["id"])
		if prev_row != curr_row:
			dom_outer_li = dom.createElement("li")
			dom_reseptilista.appendChild(dom_outer_li)
			dom_h = dom.createElement("h2")
			dom_outer_li.appendChild(dom_h)
			dom_a = dom.createElement("a")
			dom_h.appendChild(dom_a)
			# Otsikoissa on linkit sivulle, jossa reseptiä pääsee muokkaamaan.
			dom_a.setAttribute("href", "add_recipe.py?id=%s" % (row["id"],))
			dom_a.appendChild(dom.createTextNode(row["nimi"].decode("utf-8")))
			dom_ol = dom.createElement("ol")
			dom_outer_li.appendChild(dom_ol)
			prev_row = curr_row
		if row["teksti"] != None:
			dom_li = dom.createElement("li")
			dom_ol.appendChild(dom_li)
			dom_li.appendChild(dom.createTextNode(row["teksti"].decode("utf-8")))
		# tyhjät listat ei kelpaa
		else:
			tmp = dom_ol.parentNode
			tmp.removeChild(dom_ol)

	con.close()

	html = dom.toxml("utf-8")
	return html
Ejemplo n.º 2
0
def index(req):
	"""Päivitä id:tä vastaava resepti."""
	req.content_type = "text; charset=utf-8"

	data = tarkista_resepti.get_data(req)

	if not tarkista_resepti.data_ok(data):
		return "Virhe syötetyissä tiedoissa!"

	recipe_id = int(req.form.getfirst("id"))

	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()

	try:
		cur.execute("begin")
		cmd = """
			update resepti
			set nimi = ?, kuvaus = ?, henkilomaara = ?, ruokalajiid = ?
			where reseptiid = ?;
		"""
		cur.execute(cmd, (data["nimi"], data["kuvaus"], int(data["maara"]), int(data["laji"]), recipe_id))

		# Aiemmat vaiheet poistetaan.
		cmd = """
			delete
			from ohje
			where reseptiid = ?;
		"""
		cur.execute(cmd, (recipe_id,))

		# Uudet vaiheet lisätään järjestyksessä.
		cmd = """
			insert into ohje (vaihenro, reseptiid, ohjeteksti)
			values (?, ?, ?);
		"""
		vaihenro = 1
		for teksti in data["tekstit"]:
			# Tyhjät vaiheet ohitetaan/poistetaan
			if teksti.strip() == "":
				continue
			cur.execute(cmd, (vaihenro, recipe_id, teksti))
			vaihenro += 1

		cur.execute("commit")
	except Exception, e:
		cur.execute("rollback")
		return "Tietokantavirhe! (%s)" % str(e)
Ejemplo n.º 3
0
def index(req):
	"""Hae reseptit aakkosjärjestyksessä. Jos lomakkeessa on mukana "id", haetaan vain id:tä vastaava resepti."""
	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()

	accept_id = req.form.getfirst("id")
	if accept_id != None:
		accept_id = int(accept_id)

	cmd = """
		select re.nimi as nimi, re.reseptiid as id, re.kuvaus as kuvaus, re.henkilomaara as maara, re.ruokalajiid as lajiid, oh.ohjeteksti as teksti
		from resepti re
		left outer join ohje oh
		on re.reseptiid = oh.reseptiid
		order by re.nimi, re.reseptiid collate nocase;
	"""
	cur.execute(cmd)

	reseptilista = []
	resepti = None
	prev_row = None
	for row in cur:
		id = row["id"]
		if accept_id != None and id != accept_id:
			continue
		curr_row = id
		if prev_row != curr_row:
			resepti = {}
			resepti["nimi"] = row["nimi"]
			resepti["id"] = row["id"]
			resepti["kuvaus"] = row["kuvaus"]
			resepti["maara"] = row["maara"]
			resepti["laji"] = row["lajiid"]
			resepti["ohjetekstit"] = []
			reseptilista.append(resepti)
			prev_row = curr_row
		if row["teksti"] != None:
			resepti["ohjetekstit"].append(row["teksti"])

	con.close()

	req.content_type = "text; charset=utf-8"

	reseptijson = json.dumps(reseptilista)
	return reseptijson
Ejemplo n.º 4
0
def index(req):
	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()

	cur.execute("""
		select nimi as nimi, kuvaus as kuvaus, ruokalajiid as id
		from ruokalaji
		order by nimi collate nocase;
	""")

	lajit = []
	for row in cur:
		laji = listaus.append_dict({}, row)
		lajit.append(laji)

	req.content_type = "text; charset=utf-8"

	return json.dumps(lajit)
Ejemplo n.º 5
0
def index(req):
	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()

	cur.execute("""
		select nimi, kuvaus, ruokalajiid as id
		from ruokalaji
		order by nimi collate nocase;
	""")

	lajit = []
	for row in cur:
		laji = {}
		laji["nimi"] = row["nimi"]
		laji["id"] = row["id"]
		laji["kuvaus"] = row["kuvaus"]
		lajit.append(laji)

	req.content_type = "text; charset=utf-8"

	return json.dumps(lajit)
Ejemplo n.º 6
0
def index(req):
	"""Näytä lomake, jossa voi muokata kaikkia ruokalajeja yksi kerrallaan."""
	global htmlpath
	global itempath

	inserting = req.form.getfirst("insert") != None
	updating = req.form.getfirst("update") != None
	fetching = not (inserting or updating)

	dom = minidom.parse(htmlpath)
	itemdom = minidom.parse(itempath)
	dom_item_template = itemdom.documentElement

	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()


	# Hoida uusien tietojen päivittäminen tietokantaan ensiksi.
	errors = None
	db_error = False
	# Yleinen näytettävä viesti tietokantaoperaation onnistumisesta.
	status = u""
	if inserting or updating:
		data = get_form_data(req)
		errors = validate_form(data)
	if errors == None and inserting:
		try:
			cur.execute("begin")
			cmd = """
				insert into ruokalaji (nimi, kuvaus)
				values (?, ?);
			"""
			cur.execute(cmd, (data["nimi"], data["kuvaus"]))
			cur.execute("commit")
			status = u"Lisättiin uusi ruokalaji!"
		except Exception, e:
			cur.execute("rollback")
			db_error = True
			status = u"Virhe lisättäessä! (virhe: %s)" % str(e)
Ejemplo n.º 7
0
def index(req):
	req.content_type = "text; charset=utf-8"

	data = tarkista_laji.get_data(req)

	if not tarkista_laji.data_ok(data):
		return "Virhe syötetyissä tiedoissa!"

	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()

	try:
		cur.execute("begin")
		cmd = """
			insert into ruokalaji (nimi, kuvaus)
			values(?, ?);
		"""
		cur.execute(cmd, (data["nimi"], data["kuvaus"]))

		cur.execute("commit")
	except Exception, e:
		cur.execute("rollback")
		return "Tietokantavirhe! (%s)" % str(e)
Ejemplo n.º 8
0
def index(req):
	"""Hae reseptit aakkosjärjestyksessä."""
	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()

	accept_id = req.form.getfirst("id")
	if accept_id != None:
		accept_id = int(accept_id)
		cmd = """
				select distinct re.nimi as nimi, re.kuvaus as kuvaus, re.henkilomaara as maara, re.reseptiid as id, ru.nimi as laji, ru.ruokalajiid as lajiid
				from resepti re, ruokalaji ru
				where re.reseptiid = ?
					and ru.ruokalajiid = re.ruokalajiid
				order by re.nimi, re.reseptiid collate nocase;
			"""
		cur.execute(cmd, (accept_id,));
	else:
		cmd = """
				select distinct re.nimi as nimi, re.kuvaus as kuvaus, re.henkilomaara as maara, re.reseptiid as id, ru.nimi as laji, ru.ruokalajiid as lajiid
				from resepti re, ruokalaji ru
				where ru.ruokalajiid = re.ruokalajiid
				order by re.nimi, re.reseptiid collate nocase;
			"""
		cur.execute(cmd);


	aineet_cmd = """
			select ai.nimi as nimi, ai.aineid as aineid, yk.lyhenne as yksikko, yk.nimi as yksikkonimi, li.maara as maara
			from liittyy li, aine ai, yksikko yk
			where li.resepti_reseptiid = ?
				and ai.aineid = li.aine_aineid
				and yk.lyhenne = li.yksikko_lyhenne;
		"""
	vaiheet_cmd = """
			select vaihenro as numero, ohjeteksti as teksti
			from ohje
			where ohje.reseptiid = ?;
		"""

	reseptilista = []
	rows = cur.fetchall()
	for row in rows:
		resepti = append_dict({}, row)
		id = resepti["id"]

		cur.execute(aineet_cmd, (id,))
		aineet = []
		for i in cur:
			aine = append_dict({}, i)
			aineet.append(aine)
		resepti["aineet"] = aineet

		cur.execute(vaiheet_cmd, (id,))
		vaiheet = []
		for i in cur:
			vaihe = append_dict({}, i)
			vaiheet.append(vaihe)
		resepti["vaiheet"] = vaiheet

		reseptilista.append(resepti)

	con.close()

	req.content_type = "text; charset=utf-8"

	return json.dumps(reseptilista)
Ejemplo n.º 9
0
def index(req):
	"""Näytä sivu, jolla voi lisätä reseptin. Jos pyynnössä on mukana "id"-kenttä, näytetään muokkaussivu vastaavalle reseptille."""
	global addpath
	global editpath

	vaiheita = 10

	recipe_id = req.form.getfirst("id")
	get_present = recipe_id != None
	submit_present = req.form.getfirst("submit") != None
	inserting = submit_present and not get_present
	updating = submit_present and get_present
	fetching = not (inserting or updating) and get_present

	if fetching or updating:
		htmlpath = editpath
	else:
		htmlpath = addpath
	dom = minidom.parse(htmlpath)

	con = dbutil.get_con(dbutil.dbfile)
	cur = con.cursor()

	# Luo dynaamiset dom-elementit.

	# Dropdown, jossa saatavilla olevat ruokalajit.
	dom_lajilista = domutil.getContentElementById("laji", dom)
	cur.execute("""
		select nimi, ruokalajiid as id
		from ruokalaji;
	""")
	for row in cur:
		dom_option = dom.createElement("option")
		dom_lajilista.appendChild(dom_option)
		dom_option.setAttribute("value", str(row["id"]).decode("utf-8"))
		dom_option.appendChild(dom.createTextNode(row["nimi"].decode("utf-8")))

	# Tekstikentät, joihin voi kirjoittaa reseptin vaiheet.
	dom_vaihelista = domutil.getContentElementById("vaiheet", dom)
	for i in xrange(0, vaiheita):
		dom_li = dom.createElement("li")
		dom_vaihelista.appendChild(dom_li)
		dom_textarea = dom.createElement("textarea")
		dom_li.appendChild(dom_textarea)
		dom_textarea.setAttribute("name", "teksti")
		dom_textarea.setAttribute("cols", "60")
		dom_textarea.setAttribute("rows", "2")

	to_index = False
	if inserting:
		insert(req, dom, con)
	elif updating:
		to_index = update(recipe_id, req, dom, con)
	elif fetching:
		fetch(recipe_id, dom, con)

	con.close()

	# Jos muokattiin olemassaolevaa reseptiä, ei jäädä lomakkeelle.
	if to_index:
		modutil.redirect(req, "index.py")

	req.content_type = "application/xhtml+xml; charset=utf-8"

	html = dom.toxml("utf-8")
	return html