about summary refs log tree commit diff
path: root/web/webqtl/updateTrait/DataUpdatePage.py
diff options
context:
space:
mode:
Diffstat (limited to 'web/webqtl/updateTrait/DataUpdatePage.py')
-rwxr-xr-xweb/webqtl/updateTrait/DataUpdatePage.py738
1 files changed, 0 insertions, 738 deletions
diff --git a/web/webqtl/updateTrait/DataUpdatePage.py b/web/webqtl/updateTrait/DataUpdatePage.py
deleted file mode 100755
index a43f8367..00000000
--- a/web/webqtl/updateTrait/DataUpdatePage.py
+++ /dev/null
@@ -1,738 +0,0 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-#
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2011/04/20
-
-
-
-#DataUpdatePage.py
-#
-#Classes:
-#DataUpagePage
-#-KA
-
-
-import string
-from htmlgen import HTMLgen2 as HT
-import os
-import time
-
-from base.webqtlTrait import webqtlTrait
-from base.templatePage import templatePage
-from base import webqtlConfig
-from utility import webqtlUtil
-from dbFunction import webqtlDatabaseFunction
-
-#########################################
-#      Update Trait
-#########################################
-
-class DataUpdatePage(templatePage):
-
-	def __init__(self, fd):
-
-		templatePage.__init__(self, fd)
-
-		if not self.updMysql():
-			return
-
-		if not fd.genotype:
-			fd.readGenotype()
-			fd.strainlist = fd.f1list + fd.strainlist
-		
-		fd.readData()
-		
-		self.formdata = fd.formdata
-		self.dict['title'] = 'Data Updating'
-		
-		try:
-			thisTrait = webqtlTrait(fullname=self.formdata.getvalue('fullname'), cursor=self.cursor)
-			thisTrait.retrieveInfo()
-		except:
-			heading = "Updating Database"
-			detail = ["The trait doesn't exist."]
-			self.error(heading=heading,detail=detail,error="Error")
-			return
-
-		if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['user']:
-				pass
-		else:
-			heading = "Updating Database"
-			detail = ["You don't have the permission to modify this trait"]
-			self.error(heading=heading,detail=detail,error="Error")
-			return
-
-			
-		status = self.formdata.getvalue('curStatus')
-		if status == 'updateCheck': #XZhou: Check the change
-			self.updateCheckPage(fd, thisTrait)
-		elif status == 'updateResult': #XZhou: make the changes to database
-			self.updateResultPage(fd, thisTrait)
-		else: #XZhou: show info retrieved from database
-			self.dispTraitPage(fd, thisTrait)
-
-
-	def dispTraitPage(self, fd, thisTrait):	
-		form = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), name='dataInput',submit=HT.Input(type='hidden'))
-
-		#XZhou: This is to show trait info.
-		recordInfoTable = HT.TableLite(border=0, cellspacing=1, cellpadding=5,align="left")
-
-		for field in thisTrait.db.disfield:
-			fieldValue = getattr(thisTrait, field)
-			if not fieldValue:
-				fieldValue = ""
-			#fields to be ignored
-			if field in ("chipid", "genbankid"):
-				continue
-			elif field == "comments":
-				if fieldValue:
-					comments = string.split(fieldValue, '\n')
-					title0 = HT.Paragraph("Update History: ", Class="subtitle")
-					form.append(title0)
-					history = HT.Blockquote()
-					for item in comments:
-						if item:
-							history.append(item, HT.BR())
-					form.append(history)
-				continue
-			else:
-				pass
-				
-			if field == 'name' or field == 'units':
-				form.append(HT.Input(type="hidden",name=field,value=fieldValue))
-				if field == 'name':
-					inputBox = HT.Strong(fieldValue)
-				else:
-					continue
-			elif field == 'pubmed_id':
-				inputBox = HT.Span(HT.Input(type="text",name=field,size=60, maxlength=255,value=fieldValue))
-				warning = HT.Paragraph(Class="fs11 cr")
-				warning.append('1. Please enter only the PubMed ID integer value into the field above.', HT.BR(), '    Don\'t enter',
-							' other characters.', HT.BR()) 
-				warning.append('2. If you modify an existing PubMed ID, changes will affect other records with', HT.BR(), \
-							'    the same ID but will NOT affect the phenotype description or trait data.', HT.BR()) 
-				warning.append('3. If your delete an existing PubMed ID, this will not affect any other traits,', HT.BR(), \
-							'    including those with the same PubMed ID.', HT.BR()) 
-				warning.append('4. If you enter publication data for a PubMed ID that is already in the database,', HT.BR(), \
-							'    then all fields except Phenotype and Trait Data will be ignored.') 
-				inputBox.append(warning)
-			elif field == 'pre_publication_description' or field == 'post_publication_description' or field == 'original_description' or field == 'owner' or field == 'abstract' or field == 'blatseq' or field == 'targetseq' or field == 'description' or field == 'authors' or field == 'sequence' or field == 'alias' or field == 'probe_target_description':
-				inputBox = HT.Textarea(name=field, cols=60, rows=4,text=fieldValue)
-			elif field == 'post_publication_abbreviation' or field == 'pre_publication_abbreviation':
-				inputBox = HT.Input(type="text",name=field,size=60, maxlength=30,value=fieldValue)
-			elif field == 'geneid':
-				inputBox = HT.Input(type="text",name=field,size=60, maxlength=255,value=fieldValue)
-				recordInfoTable.append(HT.TR(
-                                HT.TD("%s :" % webqtlUtil.formatField(field), Class="fs12 fwb ff1", align="right"),
-                                HT.TD(width=20),HT.TD(inputBox)))
-				#XZ: homologene is not in thisTrait.db.disfield, so have to do in this way
-				field = 'homologeneid'
-				inputBox = HT.Input(type="text",name=field,size=60, maxlength=255,value=thisTrait.homologeneid)
-			else:
-				inputBox = HT.Input(type="text",name=field,size=60, maxlength=255,value=fieldValue)
-
-			#XZ: For existing non-confidential phenotype trait, pre_publication_description and pre_publication_abbreviation are not shown to anybody except submitter or admistrator to prevent the trait being set to confidential one.
-			if thisTrait.db.type == 'Publish' and field == 'pre_publication_description' or field == 'pre_publication_abbreviation':
-				if not thisTrait.confidential and webqtlConfig.USERDICT[self.privilege] < webqtlConfig.USERDICT['admin'] and self.userName != thisTrait.submitter:
-					continue
-
-			#XZ and Rob, April 20, 2011: This is to add field and inputBox to table. Note that the change of format to each field(Capitalize) by webqtlUtil.formatField function.
-			recordInfoTable.append(HT.TR(
-				HT.TD("%s :" % webqtlUtil.formatField(field), Class="fs12 fwb ff1", align="right", valign="top"),
-				HT.TD(width=5),HT.TD(inputBox)))
-
-		#XZhou: This is to show trait data.
-		recordDataTable = HT.Text('Trait data updating is disabled')
-		
-		if thisTrait.db.type == 'Publish':
-			thisTrait.retrieveData()
-			recordDataTable = HT.TableLite(border=0, width = "90%",cellspacing=2, cellpadding=2)
-			recordDataTable.append(HT.TR(HT.TD('Strain Name',Class="fs12 ffl fwb",align="Center"), 
-				HT.TD('TraitData',Class="fs12 ffl fwb",align="Center"), 
-				HT.TD('SE',Class="fs12 ffl fwb",align="Center"),
-				HT.TD('N Per Strain',Class="fs12 ffl fwb",align="Center"),
-				HT.TD('Strain Name',Class="fs12 ffl fwb",align="Center"), 
-				HT.TD('TraitData',Class="fs12 ffl fwb",align="Center"), 
-				HT.TD('SE',Class="fs12 ffl fwb",align="Center"),
-				HT.TD('N Per Strain',Class="fs12 ffl fwb",align="Center")))
-			tempTR = HT.TR(align="Center")
-			for i, strainName in enumerate(fd.strainlist):
-				if thisTrait.data.has_key(strainName):
-					tdata = thisTrait.data[strainName]
-					traitVal, traitVar, traitNP = tdata.val, tdata.var, tdata.N
-				else:
-					traitVal, traitVar, traitNP = None, None, None
-				
-				if traitVal != None:	
-					traitVal = "%2.3f" % traitVal
-				else:
-					traitVal = 'x'
-				if traitVar != None:	
-					traitVar = "%2.3f" % traitVar
-				else:
-					traitVar = 'x'
-				if traitNP != None:	
-					traitNP = "%d" % traitNP
-				else:
-					traitNP = 'x'
-						
-				tempTR.append(HT.TD(HT.Paragraph(strainName),align='CENTER'), 
-					HT.TD(HT.Input(name=strainName, size=8, maxlength=8, value=traitVal),align='CENTER'),
-					HT.TD(HT.Input(name='V'+strainName, size=8, maxlength=8, value=traitVar),align='CENTER'),
-					HT.TD(HT.Input(name='N'+strainName, size=8, maxlength=8, value=traitNP),align='CENTER'))
-				if i % 2:
-					recordDataTable.append(tempTR)
-					tempTR = HT.TR(align="Center")
-			
-			if (i+1) % 2:
-				tempTR.append(HT.TD(''))
-				tempTR.append(HT.TD(''))
-				tempTR.append(HT.TD(''))
-				recordDataTable.append(tempTR)
-					
-		updateButton = HT.Input(type='submit',name='submit', value='Submit Change',Class="button")
-		resetButton = HT.Input(type='reset',Class="button")
-		
-		hddn = {'fullname':str(thisTrait), 'FormID':'updateRecord', 'curStatus':'updateCheck', 'RISet':fd.RISet, "incparentsf1":1}
-		for key in hddn.keys():
-			form.append(HT.Input(name=key, value=hddn[key], type='hidden'))
-
-		
-		#############################
-		TD_LR = HT.TD(valign="top",colspan=2,bgcolor="#eeeeee")
-
-		containerTable = HT.TableLite(border=0, width = "90%",cellspacing=0, cellpadding=0)
-		
-		mainTitle = HT.Paragraph("Update Info and Data", Class="title")
-		
-		title1 = HT.Paragraph("Trait Information: ", Class="subtitle")
-
-		title2 = HT.Paragraph("Trait Data:", Class="subtitle")
-
-		containerTable.append(HT.TR(HT.TD(title1)), HT.TR(HT.TD(HT.BR(),updateButton,resetButton,HT.BR(),HT.BR())), 
-					 HT.TR(HT.TD(recordInfoTable)), HT.TR(HT.TD(title2)), HT.TR(HT.TD(HT.BR(),recordDataTable, HT.BR(), HT.BR())),
-					 HT.TR(HT.TD(updateButton,resetButton)))
-		
-		form.append(containerTable)
-		
-		TD_LR.append(mainTitle, form)
-		
-		self.dict['body'] = TD_LR
-		
-	def updateCheckPage(self, fd, thisTrait):
-		form = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), name='updateCheck',submit=HT.Input(type='hidden'))
-		hddn = {'fullname':str(thisTrait), 'FormID':'updateRecord', 'curStatus':'updateResult', 'RISet':fd.RISet, "incparentsf1":1}
-		
-		recordInfoTable = HT.TableLite(border=0, cellspacing=1, cellpadding=5,align="left",width="90%")
-		infoChanges = []
-		for field in thisTrait.db.disfield:
-			#fields to be ignored
-			#XZ: The stupid htmlgen can not set readonly for input and textarea. This is the only way I can prevent displayed items such as 'original_description', 'submitter' being changed.
-			if field in ("chipid", "genbankid", "comments", "original_description", "submitter"):
-				continue
-			oldValue = getattr(thisTrait, field)
-			if not oldValue:
-				oldValue = ''
-			oldValue = str(oldValue)
-			modifiedValue = self.formdata.getvalue(field)
-			if not modifiedValue:
-				modifiedValue = ""
-			modifiedValue.strip()
-			oldValue.strip()
-			if oldValue == modifiedValue:
-				form.append(HT.Input(type="hidden",name=field,value=oldValue))
-				continue
-				
-			oldValue = HT.Paragraph(oldValue, Class="cr")
-			warning = ''
-			if field == 'PubMed_ID':
-				if modifiedValue != "":
-					try:
-						modifiedValue = int(modifiedValue)
-					except:
-						continue
-					
-				#whether new PMID already exists
-				newPMIDExist = None
-				if modifiedValue:
-					self.cursor.execute("SelecT Id from Publication where PubMed_ID = %d" % modifiedValue)
-					results = self.cursor.fetchall()
-					if results:
-						newPMIDExist = results[0][0]
-				if newPMIDExist:
-					warning = HT.Paragraph(Class="fs11 cr")
-					warning.append('This new PubMed_ID already exists in our database. If you still want to change to this very PubMed_ID, the publication information (title, author, journal, etc.) will be replaced by those linked to this new PubMed_ID. That means, all the fields below (if any, except phenotype info and trait value) will be ignored.')
-
-			infoChanges.append(field)
-			inputBox = HT.Textarea(name=field, cols=50, rows=3,text=modifiedValue, onChange = "Javascript:this.form.curStatus.value='updateCheck';")
-			recordInfoTable.append(
-				HT.TR(HT.TD("%s :" % webqtlUtil.formatField(field), Class="fs12 fwb ff1", colspan = 3, valign="top")), 
-				HT.TR(HT.TD(oldValue, valign="top"),HT.TD(width=20),HT.TD( inputBox, warning)))
-
-		#XZ: homologeneid is not in thisTrait.db.disfield
-		if thisTrait.db.type == "ProbeSet":
-			field = 'homologeneid'
-			oldValue = getattr(thisTrait, field)
-                        if not oldValue:
-                                oldValue = ''
-                        oldValue = str(oldValue)
-                        modifiedValue = self.formdata.getvalue(field)
-                        if not modifiedValue:
-                                modifiedValue = ""
-                        modifiedValue.strip()
-                        oldValue.strip()
-
-                        if oldValue == modifiedValue:
-                                form.append(HT.Input(type="hidden",name=field,value=oldValue))
-                        else:
-				oldValue = HT.Paragraph(oldValue, Class="cr")
-				warning = ''
-				infoChanges.append(field)
-				inputBox = HT.Textarea(name=field, cols=50, rows=3,text=modifiedValue, onChange = "Javascript:this.form.curStatus.value='updateCheck';")
-	                        recordInfoTable.append(
-        			                        HT.TR(HT.TD("%s :" % webqtlUtil.formatField(field), Class="fs12 fwb ff1", colspan = 3, valign="top")),
-                                			HT.TR(HT.TD(oldValue, valign="top"),HT.TD(width=20),HT.TD( inputBox, warning)))
-				
-
-		if infoChanges == []:
-			recordInfoTable = ""
-			recordInfoChange = HT.Blockquote('No change has been made.')
-		else:
-			hddn['modifiedField'] = string.join(infoChanges, '::')
-			recordInfoChange = ''
-			
-		recordDataChange = HT.Blockquote('Trait data updating is disabled')
-		recordDataTable = ""
-		
-		modifiedVals = []
-		modifiedVars = []
-		modifiedNps = []
-		numDataChanges = 0
-		if thisTrait.db.type == 'Publish':
-			thisTrait.retrieveData()
-			recordDataTable = HT.TableLite(border=0, width = "90%",cellspacing=2, cellpadding=2)
-			for i, strainName in enumerate(fd.strainlist):
-				if thisTrait.data.has_key(strainName):
-					tdata = thisTrait.data[strainName]
-					traitVal, traitVar, traitNP = tdata.val, tdata.var, tdata.N
-				else:
-					traitVal, traitVar, traitNP = None, None, None
-				
-				if traitVal != None:	
-					traitVal = "%2.3f" % traitVal
-				else:
-					traitVal = 'x'
-				if traitVar != None:	
-					traitVar = "%2.3f" % traitVar
-				else:
-					traitVar = 'x'
-				if traitNP != None:	
-					traitNP = "%d" % traitNP
-				else:
-					traitNP = 'x'
-					
-				try:	
-					modifiedVal =  "%2.3f" % fd.allTraitData[strainName].val
-				except:
-					modifiedVal = 'x'
-				try:	
-					modifiedVar = "%2.3f" % fd.allTraitData[strainName].var
-				except:
-					modifiedVar = 'x'
-				try:	
-					modifiedNp = "%d" % fd.allTraitData[strainName].N
-				except:
-					modifiedNp = 'x'
-				
-				if modifiedVal != traitVal:
-					recordDataTable.append(HT.TR(HT.TD(HT.Paragraph(strainName + " Value")),
-						HT.TD(HT.Paragraph(traitVal, Class="cr")), 
-						HT.TD(HT.Input(name=strainName, size=8, maxlength=8, value=modifiedVal, onChange = "Javascript:this.form.curStatus.value='updateCheck';"))))
-					numDataChanges += 1
-					modifiedVals.append(modifiedVal)
-				else:
-					form.append(HT.Input(type="hidden",name=strainName,value=traitVal))
-					modifiedVals.append(traitVal)
-					
-				if modifiedVar != traitVar:
-					recordDataTable.append(HT.TR(HT.TD(HT.Paragraph(strainName + " SE")),
-						HT.TD(HT.Paragraph(traitVar, Class="cr")), 
-						HT.TD(HT.Input(name='V'+strainName, size=8, maxlength=8, value=modifiedVar, onChange = "Javascript:this.form.curStatus.value='updateCheck';"))))
-					numDataChanges += 1
-					modifiedVars.append(modifiedVar)
-				else:
-					form.append(HT.Input(type="hidden",name='V'+strainName,value=traitVar))
-					modifiedVars.append(traitVar)
-					
-				if modifiedNp != traitNP:
-					recordDataTable.append(HT.TR(HT.TD(HT.Paragraph(strainName + " N Per Strain")),
-						HT.TD(HT.Paragraph(traitNP, Class="cr")), 
-						HT.TD(HT.Input(name='N'+strainName, size=8, maxlength=8, value=modifiedNp, onChange = "Javascript:this.form.curStatus.value='updateCheck';"))))
-					numDataChanges += 1
-					modifiedNps.append(modifiedNp)
-				else:
-					form.append(HT.Input(type="hidden",name='N'+strainName,value=traitNP))
-					modifiedNps.append(traitNP)
-					
-					
-			if numDataChanges == 0:
-				recordDataChange = HT.Blockquote('No change has been made.')
-				recordDataTable = ""
-			else:
-				hddn['modifiedDataField'] = 1
-				recordDataChange = ""
-				
-		#if numDataChanges:
-		#	hddn['val'] = string.join(modifiedVals, ',')
-		#	hddn['var'] = string.join(modifiedVars, ',')
-		#	hddn['np'] = string.join(modifiedNps, ',')
-			
-		for key in hddn.keys():
-			form.append(HT.Input(name=key, value=hddn[key], type='hidden'))
-
-		#############################
-		TD_LR = HT.TD(valign="top",colspan=2,bgcolor="#eeeeee", height=200)
-		
-		mainTitle = HT.Paragraph("Update Info and Data", Class="title")
-		
-		title1 = HT.Paragraph("Trait Information:", Class="subtitle")
-
-		title2 = HT.Paragraph("Trait Data:", Class="subtitle")
-		
-		if numDataChanges or infoChanges:
-			recordChange = HT.Blockquote('The table below lists all the changes made. The texts in red are the original information stored on the server, the texts to the right are the modified version. ')
-			updateButton = HT.Input(type='submit',name='submit', value='Update Data',Class="button")
-			resetButton = HT.Input(type='reset',Class="button")
-			form.append(title1, HT.Center(updateButton,resetButton), recordInfoChange, recordInfoTable,title2, recordDataChange, HT.Center(recordDataTable,HT.P(),updateButton,resetButton),HT.P())
-			TD_LR.append(mainTitle, recordChange, HT.Blockquote(form))
-		else:
-			recordInfoChange = HT.Blockquote("No change has been made")
-			TD_LR.append(mainTitle, recordInfoChange)
-			
-		self.dict['body'] = TD_LR
-		#self.dict['js1'] = webqtlConfig.resetFieldScript
-		return
-
-	def updateResultPage(self, fd, thisTrait):
-	
-		comments = []
-		ctime = time.ctime()
-		##Start Updating
-		dataID = -1
-		if thisTrait.db.type == 'Publish':
-			self.cursor.execute("SelecT PublishXRef.InbredSetId, PublishXRef.DataId, PublishXRef.PublicationId, PublishXRef.PhenotypeId, PublishXRef.Sequence from PublishXRef, PublishFreeze where PublishXRef.InbredSetId= PublishFreeze.InbredSetId and  PublishFreeze.Name = '%s' and PublishXRef.Id = %s" % (thisTrait.db.name, thisTrait.name))
-			PInbredSetId, dataID, PublicationId, PhenotypeId, Sequence = self.cursor.fetchall()[0]
-			
-		modifyField = self.formdata.getvalue('modifiedField')
-		###Modify Trait Informations
-		if modifyField:
-			modifyField = string.split(modifyField, '::')
-			comments += modifyField
-			updateHomologeneid = False
-
-			if thisTrait.db.type == 'Publish':
-				PhenotypeItemUpdate = []
-				PhenotypeItemValues = []
-				PublicationItemUpdate = []
-				PublicationItemValues = []
-
-				for item in modifyField:
-					itemvalue = self.formdata.getvalue(item)
-
-					#XZ: identify Phenotype items
-					if item in ['pre_publication_description', 'post_publication_description', 'original_description', 'pre_publication_abbreviation', 'post_publication_abbreviation', 'lab_code', 'submitter', 'owner', 'authorized_users', 'units']:
-						if itemvalue != None: #XZ: the problem is that the item value can not be deleted
-							PhenotypeItemUpdate.append('%s=%%s' % item)
-							PhenotypeItemValues.append(itemvalue)
-
-							continue #XZ: this is important to distinguish Phenotype item and Publication item
-
-					elif item == "pubmed_id":
-						#Only integer allowed in this field
-						try:
-							itemvalue = int(itemvalue)
-						except:
-							itemvalue = None
-							
-						#whether old PMID exists
-						self.cursor.execute("SelecT PubMed_ID from Publication where Id = %d" % PublicationId)
-						oldPMID = self.cursor.fetchone()
-						if oldPMID:
-							oldPMID = oldPMID[0]
-						
-						#whether new PMID already exists
-						newPMID = None
-						self.cursor.execute("SelecT Id from Publication where PubMed_ID = %d" % itemvalue)
-						newPMID = self.cursor.fetchone()
-						if newPMID:
-							newPMID = newPMID[0]
-						
-						##the logic is still not very clear here
-						if newPMID:
-							#new PMID in record
-							self.cursor.execute("Update PublishXRef set PublicationId = %d where InbredSetId=%d and PhenotypeId=%d and PublicationId=%d and Sequence=%d" % (newPMID, PInbredSetId, PhenotypeId, PublicationId, Sequence))
-							#no need to update other fields
-							PublicationItemUpdate = []
-							break
-						elif itemvalue:
-							#have new PMID, but not in record or need to change
-							self.cursor.execute("Update Publication set pubmed_id=%d where Id = %s" % (itemvalue,PublicationId))
-						else:
-							#no new PMID
-							if oldPMID:
-								#remove a pubmed_id, don't know if this ever gonna happen
-								self.cursor.execute("SelecT max(Id) from Publication")
-								maxId = self.cursor.fetchone()[0] + 1
-								self.cursor.execute("SelecT * from Publication where Id = %d" % PublicationId)
-								oldRecs = list(self.cursor.fetchone())
-								oldRecs[0] = maxId
-								oldRecs[1] = None
-								NFields = ['%s'] * len(oldRecs)
-								query = "insert into Publication Values (%s)" % string.join(NFields, ',')
-								self.cursor.execute(query, tuple(oldRecs))
-								self.cursor.execute("Update PublishXRef set PublicationId = %d where InbredSetId=%d and PhenotypeId=%d and PublicationId=%d and Sequence=%d" % (maxId, PInbredSetId, PhenotypeId, PublicationId, Sequence))
-								PublicationId = maxId
-								pass
-							else:
-								pass
-						continue
-					else:
-						pass
-
-					if itemvalue:						
-						PublicationItemUpdate.append('%s=%%s' % item)
-						PublicationItemValues.append(itemvalue)
-
-				if PhenotypeItemUpdate:
-                                        updateStr= string.join(PhenotypeItemUpdate,',')
-                                        query = "Update Phenotype set %s where Id = %s" % (updateStr, PhenotypeId)
-                                        self.cursor.execute(query,tuple(PhenotypeItemValues))
-
-				if PublicationItemUpdate:
-					updateStr= string.join(PublicationItemUpdate,',')
-					query = "Update Publication set %s where Id = %s" % (updateStr, PublicationId)
-					self.cursor.execute(query,tuple(PublicationItemValues))
-
-			else: #ProbeSet or Genotype Data
-				itemValues = []
-	                        itemUpdate = []
-
-				for item in modifyField:
-					itemvalue = self.formdata.getvalue(item)
-					if itemvalue != None:
-						itemvalue = string.strip(itemvalue)
-					else:
-						pass
-					if item == 'homologeneid':
-						updateHomologeneid = True
-						new_homologeneid = 0
-
-						if itemvalue and len(itemvalue) > 0:
-							try:
-								new_homologeneid = int(itemvalue)
-							except:
-								heading = "Record Updating Result"
-								detail = ["Can't update database. Homologeneid must be integer!"]
-								self.error(heading=heading,detail=detail,error="Error")
-								return
-					else:
-						itemUpdate.append('%s=%%s' % item) #XZ: Use %% to put a % in the output string
-						itemValues.append(itemvalue)
-
-				if itemUpdate:
-					updateStr= string.join(itemUpdate,', ')
-					comments = "%s modified %s at %s\n" % (self.userName, string.join(comments, ', '), ctime)
-					if thisTrait.db.type == "ProbeSet":#XZ, June 29, 2010: The algorithm is not good. Need to fix it later.
-					 	if thisTrait.chipid in (2,4):
-					 		if thisTrait.name[-2:] == '_A':
-								thisTrait.name = string.replace(thisTrait.name, '_A', '')
-					 		elif thisTrait.name[-2:] == '_B':
-								thisTrait.name = string.replace(thisTrait.name, '_B', '')
-							else:
-								pass
-							query = "Update %s set %s where Name like '%s%%%%'" % (thisTrait.db.type,updateStr,thisTrait.name)
-							self.cursor.execute(query,tuple(itemValues))
-							self.cursor.execute("Update %s set comments = CONCAT(comments,'%s') where Name like '%s%%%%'" % (thisTrait.db.type, comments, thisTrait.name))
-						elif thisTrait.sequence:
-							query = "Update %s set %s where BlatSeq='%s'" % (thisTrait.db.type,updateStr,thisTrait.sequence)
-							self.cursor.execute(query,tuple(itemValues))
-							self.cursor.execute("Update %s set comments = CONCAT(comments,'%s') where BlatSeq='%s'" % (thisTrait.db.type, comments, thisTrait.sequence))
-						else:
-							query = "Update %s set %s where Name='%s'" % (thisTrait.db.type,updateStr,thisTrait.name)
-							self.cursor.execute(query,tuple(itemValues))
-							self.cursor.execute("Update %s set comments = CONCAT(comments,'%s') where Name='%s'" % (thisTrait.db.type, comments, thisTrait.name))
-					else: #XZ: Genotype
-						query = "Update %s set %s where SpeciesId=%s and Name='%s'" % (thisTrait.db.type,updateStr, webqtlDatabaseFunction.retrieveSpeciesId(self.cursor, thisTrait.db.riset), thisTrait.name)
-						self.cursor.execute(query,tuple(itemValues))
-
-				if updateHomologeneid: #XZ: to update homologene id must be after updating geneid.
-				#XZ: In one species, one homologeneid can have multiple geneid. One geneid only can have one homologeneid.
-				#XZ: In Homologene table, GeneId is unique.
-                                #XZ: Geneid might just being updated.
-                                        thisTrait = webqtlTrait(fullname=self.formdata.getvalue('fullname'), cursor=self.cursor)
-                                        thisTrait.retrieveInfo()
-
-					if not thisTrait.geneid:
-                                        	heading = "Record Updating Result"
-						detail = ["There is no geneid associated with this trait. Can't update homologeneid info"]
-						self.error(heading=heading,detail=detail,error="Error")
-						return
-					else:
-						query = """
-							SELECT Species.TaxonomyId
-							FROM Species, InbredSet
-							WHERE InbredSet.Name = '%s' and InbredSet.SpeciesId = Species.Id
-							""" % thisTrait.db.riset
-						self.cursor.execute(query)
-	                                        taxonomyId = self.cursor.fetchone()[0]
-
-						if not new_homologeneid:
-							query = """DELETE FROM Homologene WHERE GeneId=%s""" % thisTrait.geneid
-                                                        self.cursor.execute(query)
-						else:
-							query = """SELECT GeneId FROM Homologene WHERE GeneId=%s""" % thisTrait.geneid
-							self.cursor.execute(query)
-							result = self.cursor.fetchone()
-
-							if not result:
-	                                                        query = """INSERT into Homologene (HomologeneId, GeneId, TaxonomyId) VALUES (%s, %s, %s)""" % (new_homologeneid, thisTrait.geneid, taxonomyId)
-        	                                                self.cursor.execute(query)
-							else:
-								query = """UPDATE Homologene SET HomologeneId=%s WHERE GeneId=%s""" % (new_homologeneid, thisTrait.geneid)
-								self.cursor.execute(query)
-
-
-                                #XZ: It's critical to get lasted info first, then update gene level info across traits by geneid.
-				#XZ: Need to build index on GeneId. Otherwise, it's too slow.
-                                if thisTrait.db.type == 'ProbeSet':
-                                        thisTrait = webqtlTrait(fullname=self.formdata.getvalue('fullname'), cursor=self.cursor)
-                                        thisTrait.retrieveInfo()
-
-					if thisTrait.geneid:
-						if 'symbol' in modifyField:
-							if thisTrait.symbol:
-								query = """UPDATE ProbeSet SET Symbol='%s' WHERE GeneId=%s""" % (thisTrait.symbol, thisTrait.geneid)
-							else:
-                        	                                query = """UPDATE ProbeSet SET Symbol=NULL WHERE GeneId=%s""" % (thisTrait.geneid)
-							self.cursor.execute(query)
-
-						if 'alias' in modifyField:
-							if thisTrait.alias:
-								query = """UPDATE ProbeSet SET alias='%s' WHERE GeneId=%s""" % (thisTrait.alias, thisTrait.geneid)
-							else:
-								query = """UPDATE ProbeSet SET alias=NULL WHERE GeneId=%s""" % (thisTrait.geneid)
-							self.cursor.execute(query)
-
-						if 'description' in modifyField:
-							if thisTrait.description: #XZ: Attention, we must use "%s" instead of '%s'. Otherwise, to insert 3'UTR will generate error.
-								query = """UPDATE ProbeSet SET description="%s" WHERE GeneId=%s""" % (thisTrait.description, thisTrait.geneid)
-							else:
-								query = """UPDATE ProbeSet SET description=NULL WHERE GeneId=%s""" % (thisTrait.geneid)
-							self.cursor.execute(query)
-
-						if 'strand_gene' in modifyField:
-							if thisTrait.strand_gene:
-								query = """UPDATE ProbeSet SET Strand_Gene='%s' WHERE GeneId=%s""" % (thisTrait.strand_gene, thisTrait.geneid)
-							else:
-								query = """UPDATE ProbeSet SET Strand_Gene=NULL WHERE GeneId=%s""" % (thisTrait.geneid)
-							self.cursor.execute(query)
-
-						if 'unigeneid' in modifyField:
-							if thisTrait.unigeneid:
-								query = """UPDATE ProbeSet SET UniGeneId='%s' WHERE GeneId=%s""" % (thisTrait.unigeneid, thisTrait.geneid)
-							else:
-								query = """UPDATE ProbeSet SET UniGeneId=NULL WHERE GeneId=%s""" % (thisTrait.geneid)
-							self.cursor.execute(query)
-
-						if 'refseq_transcriptid' in modifyField:
-							if thisTrait.refseq_transcriptid:
-								query = """UPDATE ProbeSet SET RefSeq_TranscriptId='%s' WHERE GeneId=%s""" % (thisTrait.refseq_transcriptid, thisTrait.geneid)
-							else:
-								query = """UPDATE ProbeSet SET RefSeq_TranscriptId=NULL WHERE GeneId=%s""" % (thisTrait.geneid)
-							self.cursor.execute(query)
-
-						if 'genbankid' in modifyField:
-							if thisTrait.genbankid:
-								query = """UPDATE ProbeSet SET GenbankId='%s' WHERE GeneId=%s""" % (thisTrait.genbankid, thisTrait.geneid)
-							else:
-								query = """UPDATE ProbeSet SET GenbankId=NULL WHERE GeneId=%s""" % (thisTrait.geneid)
-							self.cursor.execute(query)
-
-						if 'omim' in modifyField:
-							if thisTrait.omim:
-								query = """UPDATE ProbeSet SET OMIM='%s' WHERE GeneId=%s""" % (thisTrait.omim, thisTrait.geneid)
-							else:
-								query = """UPDATE ProbeSet SET OMIM=NULL WHERE GeneId=%s""" % (thisTrait.geneid)
-							self.cursor.execute(query)
-
-
-		###Modify Trait Data
-		if thisTrait.db.type == 'Publish' and dataID > 0 and fd.formdata.getvalue("modifiedDataField"):
-			StrainIds = []
-			for item in fd.strainlist:
-				self.cursor.execute('SelecT Id from Strain where Name = "%s"' % item)
-				StrainId = self.cursor.fetchone()
-				if not StrainId:
-					raise ValueError
-				else:
-					StrainIds.append(StrainId[0])
-			comments.append('Trait Value')
-			#XZ, 03/05/2009: Xiaodong changed Data to PublishData, SE to PublishSE
-			self.cursor.execute('delete from PublishData where Id = %d' % dataID)
-			self.cursor.execute('delete from PublishSE where DataId = %d' % dataID)
-			self.cursor.execute('delete from NStrain where DataId = %d' % dataID)
-				
-			for i, strain in enumerate(fd.strainlist):
-				sId = StrainIds[i]
-				if fd.allTraitData.has_key(strain):
-					tdata = fd.allTraitData[strain]
-					_val, _var, _N = tdata.val, tdata.var, tdata.N
-					if _val != None:
-						#XZ, 03/05/2009: Xiaodong changed Data to PublishData, SE to PublishSE
-						self.cursor.execute('insert into PublishData values(%d, %d, %s)' % (dataID, sId, _val))
-					if _var != None:
-						self.cursor.execute('insert into PublishSE values(%d, %d, %s)' % (dataID, sId, _var))
-					if _N != None:
-						self.cursor.execute('insert into NStrain values(%d, %d, %s)' % (dataID, sId, _N))
-				else:
-					pass
-			#end for
-		else:
-			pass
-		TD_LR = HT.TD(valign="top", bgcolor="#eeeeee",height=200,width="100%")
-		main_title = HT.Paragraph(" Record Updating Result", Class="title")
-
-		TD_LR.append(main_title,HT.Blockquote('Successfully updated record %s in database ' % thisTrait.name, thisTrait.db.genHTML(), '.'))
-		if thisTrait.db.type == 'Publish':
-			comments = "%s modified %s at %s\n" % (self.userName, string.join(comments, ', '), ctime)
-			self.cursor.execute("Update PublishXRef set comments = CONCAT(comments,'%s') where InbredSetId=%d and PhenotypeId=%d and PublicationId=%d and Sequence=%d" % (comments,  PInbredSetId, PhenotypeId, PublicationId, Sequence))
-			
-		if 0:
-			heading = "Record Updating Result"
-			detail = ["Can't update database. The server may be down at this time or you don't have the permission"]
-			self.error(heading=heading,detail=detail,error="Error")
-			return
-		self.dict['body'] = str(TD_LR)
-