#!/usr/bin/env python

import sys, os, cgi, re, string, types #, tempfile
import tools

import cgitb; cgitb.enable(display=0, logdir='/tmp')

from cgitools import *
#home_dir = '/home/xxia/public_html' # user data will based on this dir
#users_relative_dir = "users"
#users_dir = os.path.join(home_dir, users_relative_dir)
#R_code_dir = 'R_code' # under cgi-bin

err_msg = []

# Retrieve data from user
form = cgi.FieldStorage()

requiredVars = {'map_files':'The name of the file mapping probes across platforms'} #, 'request_name':'Request name'} # these key names should be offered at least once, values are used for error msg

# put all data into a dict
page_values = {}
for k in form.keys():
	v = form.getvalue(k) #form[k] 
	page_values[k] = v.strip()

################ validation ##################
#err_msg = []

# check required named first
for k,webname in requiredVars.items():
	if not page_values[k]: err_msg.append('%s should be offered!' % webname)

if err_msg: exitWithInfo('<br>'.join(err_msg))


src_dir = {}

joint_chs = ' /// '
for d, f in [('map', 'map_files')]: #, ('project', 'prj_files'), ('intensity', 'intensity_file'), ('image', 'image_file'), ('probe', 'probe_file')]:
	dir_name = data_subdirs[d].get('name_full','')
	src_dir[d] = dir_name
	# page_values[f] = map(lambda a:(a and os.path.join(dir_name, a)), page_values[f])
	#if f=='prj_files': page_values[f] = joint_chs.join(page_values[f]) # prj_files should in one line
#src_dir['platform'] = src_dir['probe'] # filldbs.py use platform instead of "probe"

map_file = os.path.join(src_dir['map'], page_values['map_files'])


#################### read some special values ####################
req_name = page_values.get('request_name', '').strip()
if req_name:
	if not re.match(r'^[a-zA-Z0-9_]+$', req_name): err_msg.append('Error: Invalid characters in request name!<br>')
else: req_name = UniqueNameSeq(prefix='dbmap_', suffix='', dir=result_dir, num_len=3, start_num=len(os.listdir(result_dir))+1)

# prepare necessary directories.
#result_subdirs = prepareResultDirs(form_params.get('request_name', ''))

req_type = TYPE_DBS_MAPF 
#req_name = page_values['request_name'] #os.path.basename(os.path.normpath(result_subdirs['request']['name_full']))
cur_db = page_values['cur_db']
user_params = {'fill_type':'Map platforms', 'map_file':map_file, 'src_dir':src_dir, 'user_name':username, 'page_values':page_values, 'cur_db':cur_db}
n = saveReq(req_type, req_name, user_params, username)
#if n is False: exitMsg('An error ocurred when accessing database!')
if not n: exitMsg('An error ocurred on server when submitting the request!<p><input type="button" value="Go back" onClick="javascript:history.go(-1)"/></p>')

tellDaemon('New requests')

import time
time.sleep(1)

print cgi_token
print '''<body onload=javascript:window.location.href="%s/ui/browse?page_type='webarraydb_fill'"></body>''' % (script_path_url)
sys.exit(0)

#print '<body><iframe width=%s, height=%s frameborder=0 src="%s/ui/browse"</body>' % ('100%', '100%', script_path_url)
from PythonInsideHTML import PIH
exec PIH(script_path_file + "/pages/ui_browse.pih?page_type='webarraydb_fill'").pythonCode()

