templateDef = """
<div align=center>
	$rf.start
		$rf.hidden
		<table>
			#for $f in $rf.visibleFields
			#if (not $f.isSubmit)
			<tr><td align="right">$f.description:</td><td>$f $f.error</td></tr>
			#end if
			#end for
			<tr><td align="center" colspan="2">
				#for $f in $rf.submitFields
				$f $f.error
				#end for
			</td></tr>
		</table>
	$rf.end
</div>
"""

from WebKit.Page import Page
from FunFormKit.Form import *
from FunFormKit.Field import *
from FunFormKit.Validator import *
from Cheetah.Template import Template

class NotExists(ValidatorConverter):
	def validate(self, value):
		#rs = self.recordset("LM","select count(1) from Permission where permission = '%s'" % value)
		#if rs[0][0] > 0:
		#	return 'The permission "%s" already exists.' % value
		#else:
		#	return None
		
		if value != "Admin":
			return 'For this example, please use "Admin"'
		else:
			return None

fields = [	
	TextField('permission', size=20, maxLength=20,validators = [NotEmpty(),NotExists()]),
  	TextField('description', size=50, maxLength=50,validators = []),
  	HiddenField('permissionID'),
 	SubmitButton('add', description='Add', methodToInvoke='insertPermission'),
	SubmitButton('update', description='Update', methodToInvoke='updatePermission'),
	]

formDefs = [
	FormDefinition('PermissionExample','writeForm',fields),
	]


class PermissionExample(Page, FormServlet):
	def __init__(self):
		FormServlet.__init__(self, 'writeContent', formDefs)
		Page.__init__(self)
	
	def writeForm(self):
		permissionID = self.request().field('permissionID','')

		defaults = {}
		options  = {}

		if not len(permissionID):
			options['update'] = {'hide': 1}
			options['updateContact'] = {'hide': 1}
		else:
			options['add'] = {'hide': 1}

			names = 'permissionID,permission,description'
			
			#r = self.recordset("LM","select %s from Permission where permissionID = %d" % (names,int(permissionID)))[0]

			#for name in names.split(','):
			#	defaults[name] = getattr(r,name)
	
		rf = self.renderableForm(defaults=defaults, optionSet=options)
		t = Template(templateDef,{'rf':rf})
		self.writeln(t)
		
	def insertPermission(self,fields):
		sql = "insert into Permission (permission, description) values (%s,%s)" % (
			sqlq(fields['permission']),sqlq(fields['description'])
			)
		self.writeln(sql)
		#self.recordset("LM",sql)
		#self.response().sendRedirect('Permissions')

	def updatePermission(self,fields):
		permissionID = int(fields['permissionID'])
		sql = "update Permission set permission = %s, description = %s where permissionID = %d" % (
			sqlq(fields['permission']),sqlq(fields['description']),permissionID
			)
		self.writeln(sql)
		#self.recordset("LM",sql)
		#self.response().sendRedirect('Permission?permissionID=%d' % permissionID)


def sqlq(value):
	""" SQL Quote - Format a single value for a SQL statement.
	    Escape single quotes and wrap the string in single quotes.
	    If str = None, return "null" without single quotes.
	"""
	print value
	if value == None or value == '':
		return "null"
	else:
		return "'%s'" % str(value).replace("'","''")
