# 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 2010/10/20

import os
import string

from htmlgen import HTMLgen2 as HT

from base.templatePage import templatePage
from base import webqtlConfig
from utility import webqtlUtil

#########################################
#      Upload File Page 
#########################################

class uploadFilePage(templatePage):

	uploadPath = webqtlConfig.UPLOADPATH

	def __init__(self, fd, formdata, cookies):

		templatePage.__init__(self, fd)

		if not self.openMysql():
			return

                if webqtlConfig.USERDICT[self.privilege] >= webqtlConfig.USERDICT['user']:
                        pass
                else:
                        heading = "Upload File"
                        detail = ["You don't have the permission to upload file to the server."]
                        self.error(heading=heading,detail=detail)
                        return
		
		self.cursor.close()

		file1 = self.save_uploaded_file (formdata, 'imgName1')
		file2 = self.save_uploaded_file (formdata, 'imgName2')
		file3 = self.save_uploaded_file (formdata, 'imgName3')
		file4 = self.save_uploaded_file (formdata, 'imgName4')
		file5 = self.save_uploaded_file (formdata, 'imgName5')
		
		i = 0
		uploaded = []

		for filename in (file1, file2, file3, file4, file5):
			if filename: 
				i += 1
				uploaded.append(filename)
				
		if i == 0:
			heading = "Upload File"
			detail = ["No file was selected, no file uploaded."]
			self.error(heading=heading,detail=detail)
			return
		else:
			TD_LR = HT.TD(height=200,width="100%",bgColor='#eeeeee')

			imgTbl = HT.TableLite(border=0, width = "90%",cellspacing=2, cellpadding=2, align="Center")
			imgTbl.append(HT.TR(HT.TD("Thumbnail", width="%30", align='center',Class="colorBlue"), 
					HT.TD("URL", width="%60",Class="colorBlue", align='center')))
			for item in uploaded:
				img = HT.Image("/images/upload/" + item, border = 0, width=80)

				#url = "%s/images/upload/" % webqtlConfig.PORTADDR + item
				#url = HT.Href(text=url, url = url, Class='normalsize', target="_blank")
				url2 = "/images/upload/" + item
				url2 = HT.Href(text=url2, url = url2, Class='normalsize', target="_blank")
				imgTbl.append(HT.TR(HT.TD(img, width="%30", align='center',Class="colorWhite"), 
					#HT.TD(url, HT.BR(), 'OR', HT.BR(), url2,  width="%60",Class="colorWhite", align='center')))
					HT.TD(url2,  width="%60",Class="colorWhite", align='center')))

			intro = HT.Paragraph('A total of %d files are uploaded' % i)
			TD_LR.append( HT.Center(intro) )

			TD_LR.append( imgTbl )
		
			self.dict['body'] = str(TD_LR)	
		
	def save_uploaded_file(self, form, form_field, upload_dir=""):
		if not upload_dir:
			upload_dir = self.uploadPath
		if not form.has_key(form_field):
			return None
		fileitem = form[form_field]
		
		if not fileitem.filename or not fileitem.file:
			return None
		
		seqs = [""] + range(200)
		try:
			newfileName =  string.split(fileitem.filename, ".")
			for seq in seqs:
				newfileName2 = newfileName[:]
				if seq != "":
					newfileName2[-2] = "%s-%s" % (newfileName2[-2], seq)
				fileExist = glob.glob(os.path.join(upload_dir, string.join(newfileName2, ".")))
				if not fileExist:
					break
		except:
			pass
		
		newfileName = string.join(newfileName2, ".")
		#print [newfileName, os.path.join(upload_dir, newfileName)]
		#return
		
		fout = file (os.path.join(upload_dir, newfileName), 'wb')
		while 1:
			chunk = fileitem.file.read(100000)
			if not chunk: break
			fout.write (chunk)
		fout.close()
		return newfileName