# Copyright (C) 2004 Marc O. Sandlus	# CHANGEME!
# Homepage: http://www.matheraum.de/werkzeuge

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

werkzeugid = "beispiel"		# CHANGEME "beispiel" durch den Namen des werkzeugs ersetzen
author = "Marc O. Sandlus"	# CHANGEME
licence = "GNU General Public License"
username = "matux"			# CHANGEME	MatheRaum-Username für direkte Verlinkung auf das Profil

def webform( reqform, results=0 ):
	""" Eingabe: reqform: Dictionary der Formularwerte; alle Werte sind Strings.
                 results: 0: Keine Berechnung, nur Ausgabe eines leeren Formulars
                          1: Liefere Ergebnis der Berechnung zurück, inklusive Formular
        Ausgabe: Dictionary, mit den Keys 'title' und 'html'.
	"""
	# Default-Werte für Formularwerte
	form = { 'werkzeug': werkzeugid,	# DONTCHANGE
				'wert1': '',	# "wert1" ggfs. ändern
				'wert2': '',
				# ggfs. weitere Formular-Felder
		}
	form.update( reqform )
	
	# Rückgabe-Objekt
	res = { 'title': 'Beispiel-Werkzeug für Entwickler' }	# CHANGEME
	
	s = ""
	s += '<p>Muster-Beispiel eines MatheRaum-Werkzeuges</p>\n'
	s += '''<p><a href="html/mrwerkzeug_beispiel.py">Download</a> des 
	<a href="redirect/www.python.org" target="_blank">Python</a>-Quelltextes, 
	als Vorlage für Entwickler neuer MatheRaum-Werkzeuge.</p>'''
	
	# DONTCHANGE-->
	s += '<form action="werkzeuge" method="GET">\n'
	s += '<input type="hidden" name="werkzeug" value="%(werkzeug)s">\n' % form
	# <--DONTCHANGE

	s += 'Wert 1: '
	s += '<input name="wert1" value="%(wert1)s"><br>\n' % form
	
	s += 'Wert 2: '
	s += '<input name="wert2" value="%(wert2)s"><br>\n' % form

	s += '<input type="submit" value=" berechne! ">\n'
	
	s += '</form>\n'
	
	error = ""
	if results and ( form['wert1'] or form['wert2'] ):
		try:
			wert1 = int( form['wert1'] )
			wert2 = int( form['wert2'] )
			error = ""
		except ValueError:
			error = "Fehler beim Interpretieren der Eingaben."
		except TypeError:
			error = "Fehler beim Interpretieren der Eingaben."
		
		if not error:
			result, error = main( wert1, wert2 )
			
		if not error:
			s += '<b>Ergebnis</b>: %s<br>' % result
		else:
			s += '<b>Fehler</b>: %s<br>' % error
	
	res.update( { 'html':s } )
	
	return res

def main( wert1, wert2 ):	# weitere Argumente ggfs. ergänzen
	""" Hier findet die eigentliche Berechnung statt, möglichst frei von Formatierungen (HTML).
	    Diese Funktion wird nur Modul-intern aufgerufen, deswegen bleibt dir die genaue
		Festlegung der Schnittstellen überlassen ;-)
	    Eingabe: Argumente
		Ausgabe: Ergebnis-Objekt und Fehler-Objekt
	"""
	res = error = ""

	# hier erfolgt die eigentliche Berechnung
	res = wert1 * wert2

	
	return res, error
	

def testhtml( webformres, dateiname ):
	"""Eingabe: Die Rückgabe von "webform", Dateiname
	Ausgabe: Keine, diese wird direkt in eine Datei geschrieben
	"""

	s = ""
	s += '<html>\n'
	s += '<head><title>%s</title></head>\n' % webformres[ 'title' ]
	s += '<body>\n'
	s += webformres[ 'html' ]
	s += '\n</body>\n'
	s += '</html>\n'

	open( dateiname, 'w' ).write( s )

if __name__ == '__main__':
	# Für Testzwecke
	# Dieser Programmteil wird nur ausgeführt, falls das Modul direkt ausgeführt
	# wird, als eigenständiges Programm

	reqform = { 'wert1':'12', 'wert2':'34' }

	print webform( reqform, results=1 )

	# oder interaktiver Test
	
	exit = 0
	while not exit:
		keys = reqform.keys()
		keys.sort()
		print "-"*30
		while not exit and keys:
			k = keys.pop(0)
			v = raw_input( "%s: " % k )

			if not v:
				exit = 1
			
			reqform[ k ] = v
		
		if not exit:
			webformres = webform( reqform, results= 1)
			print webformres
			#testhtml( webformres, '/tmp/webform.html' )	# für Linux
			#testhtml( webformres, 'c:\temp\webform.htm' )	# für Windows-Gläubige
			print "-"*30

# vim:ts=4
