#!/usr/bin/env python

import sys
#from deldbs import *

from tools import *
from cgitools import isOnline, script_path_url, js_dir, username, cgi_token_xml

# get default db name
exec get_dbstr()

# need dbnm, tbnm, rec_id, colname, value, type, dyn from pih_vars

print cgi_token_xml

def exitInfo(s):
	print '<data>%s</data>' % s
	sys.exit(0)

if not isOnline(): exitInfo('Please log on')

# accept pih_vars from #ui
pih_vars = eval(unescape(os.getenv('QUERY_STRING')))

dbnm = pih_vars.get('db', db)
tbnm = pih_vars.get('tb', '')
if not tbnm: exitInfo('Table name is not specified yet!')
rec = pih_vars.get('rec', None) # rec should be an int
if rec is None: exitInfo('Record No. is not specified yet!')
col = pih_vars.get('col', '')
if not col: exitInfo('No column name specified yet!')
val = pih_vars.get('val', None)
if val is None: exitInfo('No value offered!')
tp = pih_vars.get('tp', 'string')
dyn = pih_vars.get('dyn', None)

# check privilege permission
if username == 'demo' and freeze_demo: exitInfo('The demo user has no privilege to change record!')
cur = getCursor()
if tbnm == 'project':
	unm = inquireDB('SELECT u.user_name FROM %s.project p, %s.users u WHERE p.id=%d AND p.user_id=u.id' % (dbnm, db, rec), cursor=cur, fetch=True)
else:
	unm = inquireDB('SELECT u.user_name FROM %s.%s t, %s.project p, %s.users u WHERE t.id=%d AND t.project_id=p.id AND p.user_id=u.id' % (dbnm, tbnm, dbnm, db, rec), cursor=cur, fetch=True)
unm = unm and unm[0][0] or ''
if not unm or unm != username: exitInfo('No privilege to change record!')

# may have some codes to validate value here

if not dyn:
	SQL = 'UPDATE %s.%s SET %s=%s WHERE id=%d' % (dbnm, tbnm, col, repr(val), rec)
else:
	dyncolnm = tp=='int' and 'value_int' or (tp=='float' and 'value_float' or 'value_str')
	SQL = 'UPDATE %s.dyncol d, %s.dyncoldef f SET d.%s=%s WHERE f.tb_name="%s" && f.col_name="%s" && f.id=d.col_id && d.rec_id=%d' % (dbnm, dbnm, dyncolnm, repr(val), tbnm, col, rec)

try: 
	inquireDB(SQL, cursor=cur) #cur.execute(SQL)
	saveEvent(user_id=username, ev_catcode="edititem", ev_valstr='%s::%s::%s::%d' % (dbnm, tbnm, col, rec), cur=cur)
	success = True
except: 
	success = False
	#exitInfo(SQL) 
if not success: exitInfo('Failed to update record!')
if cur.rowcount > 0: exitInfo('success')
else: exitInfo('No record updated!')

