def createProject(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` # Handlers pHandler = ProjectDatabaseHandler(db, cursor) uHandler = UserHandler(db, cursor) # Get form values projectID = form.getvalue("packetID") ownerID = form.getvalue("packetOwner") # get owner's name packetOwner = uHandler.getUserByID(ownerID) packetName = form.getvalue("packetName") packetDescription = form.getvalue("packetDescription") # private or public if form.getvalue("private_or_public") == "public": isPrivate = False else: isPrivate = True # Lists of project readers & editors # These are lists of INTEGER USER IDs!!!!! # A User instance needs to be created for each!!!!!!! projectReaderIDs = form.getlist("readersTargetList") projectWriterIDs = form.getlist("writersTargetList") projectReaders = [] projectWriters = [] for rID in projectReaderIDs: tmpReader = uHandler.getUserByID(rID) projectReaders.append(tmpReader) for wID in projectWriterIDs: tmpWriter = uHandler.getUserByID(wID) # Now check if the user is an OpenFreezer writer - otherwise cannot be made Writer on a project if tmpWriter.getCategory() != 'Reader': projectWriters.append(tmpWriter) newProject = Packet(projectID, packetName, packetDescription, packetOwner, isPrivate, projectReaders, projectWriters) packetID = pHandler.insertPacket( newProject) # new project is empty by default self.showProjectDetails('view', newProject)
def modifyProject(self, form): #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` db = self.__db cursor = self.__cursor hostname = self.__hostname # Handlers pHandler = ProjectDatabaseHandler(db, cursor) uHandler = UserHandler(db, cursor) # Get project ID from form projectID = form.getvalue("packetID") ownerID = form.getvalue("packetOwner") # get owner's name packetOwner = uHandler.getUserByID(ownerID) packetName = form.getvalue("packetName") packetDescription = form.getvalue("packetDescription") # access type: accessType = form.getvalue("private_or_public") if accessType == 'Private': isPrivate = True else: isPrivate = False # Lists of project readers & editors # In this view, these are list of INTEGER USER IDs # A User instance needs to be created for each!!!!!!! projectReaderIDs = form.getlist("projectReaders") projectWriterIDs = form.getlist("projectWriters") projectReaders = [] projectWriters = [] for rID in projectReaderIDs: tmpReader = uHandler.getUserByID(rID) projectReaders.append(tmpReader) for wID in projectWriterIDs: tmpWriter = uHandler.getUserByID(wID) projectWriters.append(tmpWriter) newProject = Packet(projectID, packetName, packetDescription, packetOwner, isPrivate, projectReaders, projectWriters) self.showProjectDetails('edit', newProject)
def createProject(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` # Handlers pHandler = ProjectDatabaseHandler(db, cursor) uHandler = UserHandler(db, cursor) # Get form values projectID = form.getvalue("packetID") ownerID = form.getvalue("packetOwner") # get owner's name packetOwner = uHandler.getUserByID(ownerID) packetName = form.getvalue("packetName") packetDescription = form.getvalue("packetDescription") # private or public if form.getvalue("private_or_public") == "public": isPrivate = False else: isPrivate = True # Lists of project readers & editors # These are lists of INTEGER USER IDs!!!!! # A User instance needs to be created for each!!!!!!! projectReaderIDs = form.getlist("readersTargetList") projectWriterIDs = form.getlist("writersTargetList") projectReaders = [] projectWriters = [] for rID in projectReaderIDs: tmpReader = uHandler.getUserByID(rID) projectReaders.append(tmpReader) for wID in projectWriterIDs: tmpWriter = uHandler.getUserByID(wID) # Now check if the user is an OpenFreezer writer - otherwise cannot be made Writer on a project if tmpWriter.getCategory() != 'Reader': projectWriters.append(tmpWriter) newProject = Packet(projectID, packetName, packetDescription, packetOwner, isPrivate, projectReaders, projectWriters) packetID = pHandler.insertPacket(newProject) # new project is empty by default self.showProjectDetails('view', newProject)
def modifyProject(self, form): #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` db = self.__db cursor = self.__cursor hostname = self.__hostname # Handlers pHandler = ProjectDatabaseHandler(db, cursor) uHandler = UserHandler(db, cursor) # Get project ID from form projectID = form.getvalue("packetID") ownerID = form.getvalue("packetOwner") # get owner's name packetOwner = uHandler.getUserByID(ownerID) packetName = form.getvalue("packetName") packetDescription = form.getvalue("packetDescription") # access type: accessType = form.getvalue("private_or_public") if accessType == 'Private': isPrivate = True else: isPrivate = False # Lists of project readers & editors # In this view, these are list of INTEGER USER IDs # A User instance needs to be created for each!!!!!!! projectReaderIDs = form.getlist("projectReaders") projectWriterIDs = form.getlist("projectWriters") projectReaders = [] projectWriters = [] for rID in projectReaderIDs: tmpReader = uHandler.getUserByID(rID) projectReaders.append(tmpReader) for wID in projectWriterIDs: tmpWriter = uHandler.getUserByID(wID) projectWriters.append(tmpWriter) newProject = Packet(projectID, packetName, packetDescription, packetOwner, isPrivate, projectReaders, projectWriters) self.showProjectDetails('edit', newProject)
def findPacket(self, packetID): db = self.db cursor = self.cursor uHandler = UserHandler(db, cursor) newPacket = None cursor.execute("SELECT ownerID, packetName, is_private, comment FROM Packets_tbl p, GeneralComments_tbl c WHERE packetID=" + `packetID` + " AND p.packetDescription = c.commentID AND p.status='ACTIVE' AND c.status='ACTIVE'") result = cursor.fetchone() if result: ownerID = int(result[0]) packetOwner = uHandler.getUserByID(ownerID) packetName = result[1] # private or public accessType = result[2] # Value TRUE or FALSE is returned as a STRING, convert to Boolean if accessType == 'TRUE': isPrivate = True else: isPrivate = False packetDescr = result[3] packetReaders = self.findProjectMembers(packetID, 'Reader') packetWriters = self.findProjectMembers(packetID, 'Writer') newPacket = Packet(packetID, packetName, packetDescr, packetOwner, isPrivate, packetReaders, packetWriters) return newPacket
def findAllProjects(self, isPrivate=""): #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO db = self.db cursor = self.cursor uHandler = UserHandler(db, cursor) projects = [] if isPrivate == "": cursor.execute("SELECT packetID, ownerID, packetName, packetDescription FROM Packets_tbl WHERE status='ACTIVE'") results = cursor.fetchall() for result in results: packetID = int(result[0]) ownerID = int(result[1]) packetName = result[2] packetDescr = result[2] packetOwner = uHandler.getUserByID(ownerID) newPacket = Packet(packetID, packetName, packetDescr, packetOwner) projects.append(newPacket) else: cursor.execute("SELECT packetID, ownerID, packetName, packetDescription FROM Packets_tbl WHERE is_private=" + `isPrivate` + " AND status='ACTIVE'") results = cursor.fetchall() for result in results: packetID = int(result[0]) ownerID = int(result[1]) packetName = result[2] packetDescr = result[2] packetOwner = uHandler.getUserByID(ownerID) newPacket = Packet(packetID, packetName, packetDescr, packetOwner) projects.append(newPacket) return projects
def handle(self): db = self.__db cursor = self.__cursor form = cgi.FieldStorage(keep_blank_values="True") uHandler = UserHandler(db, cursor) #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` if form.has_key("username"): # store the user ID for use throughout the session; add to other views in addition to create in PHP currUname = form.getvalue("username") currUser = uHandler.getUserByDescription(currUname) Session.setUser(currUser) elif form.has_key("curr_user_id"): currUID = form.getvalue("curr_user_id") currUser = uHandler.getUserByID(currUID) Session.setUser(currUser) if form.has_key("create_project"): self.createProject(form) elif form.has_key("modify_project"): self.modifyProject(form) elif form.has_key("save_project"): self.saveProject(form) elif form.has_key("cancel_project"): self.cancelModification(form) elif form.has_key("delete_project"): self.deleteProject(form) elif form.has_key("view_project"): self.printProjectInfo(form) elif form.has_key("view_packet"): # go to project view from User detailed view self.viewPacket(form) # Oct. 12, 2010 elif form.has_key("search_project_by_keyword"): self.findPacket(form) cursor.close() db.close()
def handle(self): db = self.__db cursor = self.__cursor form = cgi.FieldStorage(keep_blank_values="True") uHandler = UserHandler(db, cursor) #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` if form.has_key("username"): # store the user ID for use throughout the session; add to other views in addition to create in PHP currUname = form.getvalue("username") currUser = uHandler.getUserByDescription(currUname) Session.setUser(currUser) elif form.has_key("curr_user_id"): currUID = form.getvalue("curr_user_id") currUser = uHandler.getUserByID(currUID) Session.setUser(currUser) if form.has_key("create_project"): self.createProject(form) elif form.has_key("modify_project"): self.modifyProject(form) elif form.has_key("save_project"): self.saveProject(form) elif form.has_key("cancel_project"): self.cancelModification(form) elif form.has_key("delete_project"): self.deleteProject(form) elif form.has_key("view_project"): self.printProjectInfo(form) elif form.has_key("view_packet"): # go to project view from User detailed view self.viewPacket(form) # Oct. 12, 2010 elif form.has_key("search_project_by_keyword"): self.findPacket(form) cursor.close() db.close()
def viewUser(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname # print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! # print # DITTO # print `form` uHandler = UserHandler(db, cursor) userID = form.getvalue("view_user") newUser = uHandler.getUserByID(userID) self.printUserInfo("view", newUser)
def viewUser(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` uHandler = UserHandler(db, cursor) userID = form.getvalue("view_user") newUser = uHandler.getUserByID(userID) self.printUserInfo('view', newUser)
def cancelUserModification(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname # print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! # print # DITTO # print `form` uHandler = UserHandler(db, cursor) pHandler = ProjectDatabaseHandler(db, cursor) userID = int(form.getvalue("userID")) newUser = uHandler.getUserByID(userID) self.printUserInfo("view", newUser)
def cancelUserModification(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` uHandler = UserHandler(db, cursor) pHandler = ProjectDatabaseHandler(db, cursor) userID = int(form.getvalue('userID')) newUser = uHandler.getUserByID(userID) self.printUserInfo('view', newUser)
def modifyUser(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname uHandler = UserHandler(db, cursor) lHandler = LabHandler(db, cursor) pHandler = ProjectDatabaseHandler(db, cursor) ucMapper = UserCategoryMapper(db, cursor) category_Name_ID_Map = ucMapper.mapCategoryNameToID() # print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! # print # DITTO # print `form` # Get form values userID = int(form.getvalue("userID")) newUser = uHandler.getUserByID(userID) """ labID = int(form.getvalue("labID")) username = form.getvalue("username") firstName = form.getvalue("firstName") lastName = form.getvalue("lastName") description = firstName + " " + lastName email = form.getvalue("email") passwd = form.getvalue("password") """ readProjects = pHandler.findMemberProjects(userID, "Reader") newUser.setReadProjects(readProjects) writeProjects = pHandler.findMemberProjects(userID, "Writer") newUser.setWriteProjects(writeProjects) self.printUserInfo("edit", newUser)
def modifyUser(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname uHandler = UserHandler(db, cursor) lHandler = LabHandler(db, cursor) pHandler = ProjectDatabaseHandler(db, cursor) ucMapper = UserCategoryMapper(db, cursor) category_Name_ID_Map = ucMapper.mapCategoryNameToID() #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` # Get form values userID = int(form.getvalue("userID")) newUser = uHandler.getUserByID(userID) ''' labID = int(form.getvalue("labID")) username = form.getvalue("username") firstName = form.getvalue("firstName") lastName = form.getvalue("lastName") description = firstName + " " + lastName email = form.getvalue("email") passwd = form.getvalue("password") ''' readProjects = pHandler.findMemberProjects(userID, 'Reader') newUser.setReadProjects(readProjects) writeProjects = pHandler.findMemberProjects(userID, 'Writer') newUser.setWriteProjects(writeProjects) self.printUserInfo('edit', newUser)
def handle(self): db = self.__db cursor = self.__cursor hostname = self.__hostname mail_server = self.__mail_server # August 19, 2011 mail_admin = self.__mail_admin # August 19, 2011 clone_request = self.__clone_request form = cgi.FieldStorage(keep_blank_values="True") uHandler = UserHandler(db, cursor) #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` if form.has_key("curr_username"): # store the user ID for use throughout the session; add to other views in addition to create in PHP currUname = form.getvalue("curr_username") currUser = uHandler.getUserByDescription(currUname) Session.setUser(currUser) elif form.has_key("curr_user_id"): currUID = form.getvalue("curr_user_id") currUser = uHandler.getUserByID(currUID) Session.setUser(currUser) if form.has_key("add_user"): self.addUser(form) elif form.has_key("modify_user"): self.modifyUser(form) elif form.has_key("cancel_user"): self.cancelUserModification(form) elif form.has_key("save_user"): self.saveUser(form) elif form.has_key("delete_user"): self.deleteUser(form) elif form.has_key("view_user") and form.getvalue( "view_user") != "" and not form.has_key( "modify_lab") and not form.has_key("delete_lab"): self.viewUser(form) # Nov. 17/07 - Personal user page elif form.has_key("view_user") and form.getvalue( "view_user") == "" and not form.has_key( "modify_lab") and not form.has_key("delete_lab"): self.printUserInfo('view', currUser) elif form.has_key("add_lab"): self.addLab(form) elif form.has_key("view_lab"): self.viewLab(form) elif form.has_key("modify_lab"): self.modifyLab(form) elif form.has_key("save_lab"): self.saveLab(form) elif form.has_key("cancel_lab"): self.cancelLabModification(form) elif form.has_key("delete_lab"): self.deleteLab(form) elif form.has_key("bug_report"): self.submitBug(form) elif form.has_key("send_order"): ###################################################################### # CHANGE SERVER NAME AND EMAIL TO YOUR LOCAL CREDENTIALS ###################################################################### userID = form.getvalue("curr_user_id") userDescr = form.getvalue("curr_username") from_email = uHandler.findEmail(userID) if not from_email: from_email = userDescr to_email = clone_request email_subject = userDescr + ": Clone Request" f_in = form.getvalue("outputContent") infile = open(f_in, 'rb') msg = email.MIMEMultipart.MIMEMultipart() #msg.attach(email.MIMEText.MIMEText(infile.read())) # no, this attaches plain text msg['Subject'] = email_subject part = email.MIMEBase.MIMEBase('application', "octet-stream") part.set_payload(infile.read()) email.Utils.base64.standard_b64encode(infile.read()) part.add_header( 'Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f_in)) msg.attach(part) server = smtplib.SMTP(mail_server) server.set_debuglevel(1) # Send a request to your clone request address server.sendmail(from_email, to_email, msg.as_string()) # AND send a copy to the user (change the subject) #msg['Subject'] = "Clone request confirmation" # doesn't change, investigate later # Return email text changed March 31/08 ####################################### # CHANGE TEXT AS NEEDED ####################################### msg.attach( email.MIMEText.MIMEText( "This is a copy of your clone request. Please retain for your records. You will be notified by e-mail when your clone is ready." )) server.sendmail(to_email, from_email, msg.as_string()) server.quit() # Method 2 #sendmail = "/usr/sbin/sendmail" #o = os.popen("%s -t" % sendmail,"w") #o.write("To: %s\r\n" % to_email) #if from_email: #o.write("From: %s\r\n" % from_email) #o.write("Subject: %s\r\n" % email_subject) #o.write("\r\n") #o.write("%s\r\n" % msg) #o.close() os.remove(f_in) # delete the file from /tmp dir utils.redirect(hostname + "User.php?View=8&Sent=1") # June 1, 2010: Automated password reset elif form.has_key("reset_pw"): # change June 2, 2010: Don't enter email, rather, ask users to enter their username - more secure #to_email = form.getvalue("email") from_email = mail_admin #success = True chars = string.letters + string.digits new_passwd = "" for i in range(10): new_passwd += choice(chars) # reset it in the database if form.has_key("uName"): u_name = form.getvalue("uName") userID = uHandler.findUserIDByUsername(u_name) if userID > 0: u_descr = uHandler.findDescription(userID) to_email = uHandler.findEmail(userID) uHandler.setUserPropertyValue(userID, 'password', new_passwd) email_subject = "OpenFreezer Password Change" msg = email.MIMEMultipart.MIMEMultipart() #msg.attach(email.MIMEText.MIMEText(infile.read())) # no, this attaches plain text msg['Subject'] = email_subject ################################### # CHANGE TEXT AS NEEDED ################################### msg.attach( email.MIMEText.MIMEText( "Dear " + u_descr + ",\n\nYour password for OpenFreezer has been changed.\n\nYour temporary new password is: " + new_passwd + ".\n\nPlease change the temporary password as soon as you log into the system.\n\nYour username for OpenFreezer is '" + u_name + "'.\n\nFor any questions, please refer to http://openfreezer.org. \n\nSincerely,\nOpenFreezer support team.\n--------------------------------\nThis is an automatically generated e-mail message. Please do not reply to this e-mail. All questions should be directed to your local administrator." )) server = smtplib.SMTP(mail_server) server.set_debuglevel(1) server.sendmail(from_email, to_email, msg.as_string()) server.quit() utils.redirect(hostname + "User.php?View=6&Reset=1&uid=" + ` userID `) else: # retry by description if form.has_key("uDesc"): u_descr = form.getvalue("uDesc") # but account for whitespace toks = u_descr.split(" ") tmp_descr = "" for tok in toks: tmp_descr += tok.strip() + " " # strip extra whitespace from end tmp_descr = tmp_descr.strip() userID = uHandler.findUserIDByDescription(tmp_descr) if userID > 0: u_name = uHandler.findUsername(userID) to_email = uHandler.findEmail(userID) uHandler.setUserPropertyValue( userID, 'password', new_passwd) email_subject = "OpenFreezer Password Change" msg = email.MIMEMultipart.MIMEMultipart() #msg.attach(email.MIMEText.MIMEText(infile.read())) # no, this attaches plain text msg['Subject'] = email_subject ############################## # CHANGE TEXT AS NEEDED ############################## msg.attach( email.MIMEText.MIMEText( "Dear " + u_descr + ",\n\nYour password for OpenFreezer has been changed.\n\nYour temporary new password is: " + new_passwd + ".\n\nPlease change the temporary password as soon as you log into the system.\n\nYour username for OpenFreezer is '" + u_name + "'.\n\nPlease refer to http://openfreezer.org for additional support.\n\nSincerely,\nOpenFreezer support team.\n--------------------------------\nThis is an automatically generated e-mail message. Please do not reply to this e-mail. All questions should be directed to <a href='mailto:" + mail_admin + "'>" + mail_admin + "</a>")) server = smtplib.SMTP(mail_server) server.set_debuglevel(1) server.sendmail(from_email, to_email, msg.as_string()) server.quit() utils.redirect(hostname + "User.php?View=6&Reset=1&uid=" + ` userID `) else: utils.redirect(hostname + "User.php?View=6&Reset=0") else: utils.redirect(hostname + "User.php?View=6&Reset=0") else: utils.redirect(hostname + "User.php?View=6&Reset=0") cursor.close() db.close()
def saveUser(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname # print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! # print # DITTO # print `form` uHandler = UserHandler(db, cursor) lHandler = LabHandler(db, cursor) pHandler = ProjectDatabaseHandler(db, cursor) ucMapper = UserCategoryMapper(db, cursor) category_ID_Name_Map = ucMapper.mapCategoryIDToName() newProps = {} # Get form values userID = int(form.getvalue("userID")) newUser = uHandler.getUserByID(userID) labID = int(form.getvalue("labs")) tmpLab = lHandler.findLabByID(labID) # rest of user properties username = form.getvalue("username") firstName = form.getvalue("firstName") lastName = form.getvalue("lastName") description = firstName + " " + lastName email = form.getvalue("email") category = category_ID_Name_Map[int(form.getvalue("system_access_level"))] newProps["labID"] = labID newProps["username"] = username newProps["firstname"] = firstName newProps["lastname"] = lastName newProps["description"] = description newProps["email"] = email newProps["category"] = category try: # Now do an update on database level AND on class level: uHandler.updateUserProperties(userID, newProps) # database update # Interface level newUser.setUsername(username) newUser.setFirstName(firstName) newUser.setLastName(lastName) newUser.setDescription(description) newUser.setEmail(email) newUser.setLab(tmpLab) newUser.setCategory(category) # update list of user's projects if form.has_key("userProjectsReadonly"): # list of IDs readonlyProjects = utils.unique(form.getlist("userProjectsReadonly")) pHandler.updateUserProjects(userID, readonlyProjects, "Reader") else: # safe to assume should delete projects? pHandler.deleteMemberProjects(userID, "Reader") if form.has_key("userProjectsWrite"): writeProjects = utils.unique(form.getlist("userProjectsWrite")) pHandler.updateUserProjects(userID, writeProjects, "Writer") else: # safe to assume should delete projects? pHandler.deleteMemberProjects(userID, "Writer") # think about this # newUser.setReadProjects(readProjects) # newUser.setWriteProjects(writeProjects) # return to detailed view self.printUserInfo("view", newUser) # utils.redirect(hostname + "User.php?View=3&fd=" + filename) except DuplicateUsernameException: # return to the view with input values and error message # Need to construct a dummy User instance to save form values for error output on the next page (otherwise they're lost as soon as Submit is pressed and creation view is exited) newLab = lHandler.findLabByID(labID) newUser = User(userID, username, firstName, lastName, description, newLab, category, email, "") self.printUserInfo("edit", newUser, "Dup_un")
def addUser(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname mail_server = self.__mail_server # August 19, 2011 mail_programmer = self.__mail_programmer # July 30, 2010 mail_biologist = self.__mail_biologist mail_admin = self.__mail_admin # print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! # print # DITTO # print `form` uHandler = UserHandler(db, cursor) lHandler = LabHandler(db, cursor) pHandler = ProjectDatabaseHandler(db, cursor) ucMapper = UserCategoryMapper(db, cursor) category_Name_ID_Map = ucMapper.mapCategoryNameToID() # Get form values labID = int(form.getvalue("labs")) username = form.getvalue("username") firstName = form.getvalue("firstName") lastName = form.getvalue("lastName") description = firstName + " " + lastName to_email = form.getvalue("email") from_email = mail_admin # Change July 30, 2010 - random password generator # passwd = form.getvalue("password") chars = string.letters + string.digits passwd = "" for i in range(10): passwd += choice(chars) # System access level: Lab default or override? # if form.getvalue("privChoiceRadio") == 'override': accessLevel = category_Name_ID_Map[form.getvalue("system_access_level")] # else: # accessLevel = lHandler.findDefaultAccessLevel(labID) newProps = {} try: # Insert User information userID = uHandler.insertUser( username, firstName, lastName, description, accessLevel, to_email, passwd, labID ) # newUser = uHandler.getUserByID(userID) tmpLab = lHandler.findLabByID(labID) # print tmpLab.getName() # Insert Project info # Sept. 11/07: Differentiate between user categories Reader and Writer - different field names if form.has_key("userProjectsReadonly"): # list of IDs readonlyProjects = utils.unique(form.getlist("userProjectsReadonly")) # print `readonlyProjects` pHandler.insertMemberProjects(userID, readonlyProjects, "Reader") elif form.has_key("userProjectsReadonlyWrite"): # list of IDs readonlyProjects = utils.unique(form.getlist("userProjectsReadonlyWrite")) # print `readonlyProjects` pHandler.insertMemberProjects(userID, readonlyProjects, "Reader") # Write projects exist only for Writers if form.has_key("userProjectsWrite"): writeProjects = utils.unique(form.getlist("userProjectsWrite")) pHandler.insertMemberProjects(userID, writeProjects, "Writer") # don't assign projects to a User instance - will retrieve them from db in output function newUser = User( userID, username, firstName, lastName, description, tmpLab, form.getvalue("system_access_level"), to_email, passwd, [], [], ) email_subject = "OpenFreezer User Account" msg = email.MIMEMultipart.MIMEMultipart("alternative") msg["Subject"] = email_subject msg["To"] = to_email msgText = ( "Hi " + firstName + ",<BR><BR>An OpenFreezer account has been created for you. Your access level is " + form.getvalue("system_access_level") + ", so you can " ) if form.getvalue("system_access_level") == "Reader": msgText += "search for clones. If you wish to add/modify reagents or create projects, please contact the administrator to upgrade your access level.<BR>" elif form.getvalue("system_access_level") == "Writer": msgText += "search, add, and modify reagents. If you wish to create projects, please contact the administrator to upgrade your access level.<BR>" elif form.getvalue("system_access_level") == "Creator": msgText += "search for clones, add and modify reagents, as well as create your own projects.<BR>" ##################################################### # CHANGE TEXT AS NEEDED ##################################################### msgText += ( "<BR>The URL to access the system is <a href='" + hostname + "'>" + hostname + "</a>. Your username is <b>" + username + "</b>, and your temporary password is <b>" + passwd + "</b>. Please <u>change the temporary password as soon as you log into the website</u> - you can do it through the 'Change your password' link under the 'User Management' menu section.<BR><BR>Please refer to http://openfreezer.org for additional support.<BR><BR>Sincerely,<BR>OpenFreezer support team.<BR><BR><span style='font-family:Courier; font-size:10pt;'><HR>This is an automatically generated e-mail message. Please do not reply to this e-mail. All questions should be directed to your local administrator.</span>" ) msgText = email.MIMEText.MIMEText(msgText, "html") msg.attach(msgText) server = smtplib.SMTP(mail_server) server.set_debuglevel(1) server.sendmail(from_email, [to_email], msg.as_string()) server.quit() self.printUserInfo("view", newUser) except DeletedUserException: # Without asking too many questions, reactivate the deleted user and overwrite his/her attributes with the form input values userID = uHandler.findUserIDByUsername(username) newProps["firstname"] = firstName newProps["lastname"] = lastName newProps["description"] = description newProps["email"] = email newProps["status"] = "ACTIVE" newProps["password"] = passwd # Insert new database values and create new object uHandler.updateUserProperties(userID, newProps) # database update newUser = uHandler.getUserByID(userID) # Insert Project info readProjects = [] writeProjects = [] if form.has_key("userProjectsReadonly"): # list of IDs readonlyProjects = form.getlist("userProjectsReadonly") for r in readonlyProjects: pHandler.addProjectMember(r, userID, "Reader") # tmpReadProject = pHandler.findPacket(r) # readProjects.append(tmpReadProject) # newUser.addProject(tmpReadProject, 'read') if form.has_key("userProjectsWrite"): writeProjects = form.getlist("userProjectsWrite") for w in writeProjects: pHandler.addProjectMember(w, userID, "Writer") # tmpWriteProject = pHandler.findPacket(w) # writeProjects.append(tmpWriteProject) # newUser.addProject(tmpWriteProject, 'write') # newUser.setReadProjects(readProjects) # newUser.setWriteProjects(writeProjects) self.printUserInfo("view", newUser) # utils.redirect(hostname + "User.php?View=3&fd=" + filename) except DuplicateUsernameException: # return to the view with input values and error message # Need to construct a dummy User instance to save form values for error output on the next page (otherwise they're lost as soon as Submit is pressed and creation view is exited) newLab = lHandler.findLabByID(labID) newUser = User(0, username, firstName, lastName, description, newLab, "", email, passwd) self.printUserInfo("create", newUser)
def handle(self): db = self.__db cursor = self.__cursor hostname = self.__hostname mail_server = self.__mail_server # August 19, 2011 mail_admin = self.__mail_admin # August 19, 2011 clone_request = self.__clone_request form = cgi.FieldStorage(keep_blank_values="True") uHandler = UserHandler(db, cursor) # print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! # print # DITTO # print `form` if form.has_key("curr_username"): # store the user ID for use throughout the session; add to other views in addition to create in PHP currUname = form.getvalue("curr_username") currUser = uHandler.getUserByDescription(currUname) Session.setUser(currUser) elif form.has_key("curr_user_id"): currUID = form.getvalue("curr_user_id") currUser = uHandler.getUserByID(currUID) Session.setUser(currUser) if form.has_key("add_user"): self.addUser(form) elif form.has_key("modify_user"): self.modifyUser(form) elif form.has_key("cancel_user"): self.cancelUserModification(form) elif form.has_key("save_user"): self.saveUser(form) elif form.has_key("delete_user"): self.deleteUser(form) elif ( form.has_key("view_user") and form.getvalue("view_user") != "" and not form.has_key("modify_lab") and not form.has_key("delete_lab") ): self.viewUser(form) # Nov. 17/07 - Personal user page elif ( form.has_key("view_user") and form.getvalue("view_user") == "" and not form.has_key("modify_lab") and not form.has_key("delete_lab") ): self.printUserInfo("view", currUser) elif form.has_key("add_lab"): self.addLab(form) elif form.has_key("view_lab"): self.viewLab(form) elif form.has_key("modify_lab"): self.modifyLab(form) elif form.has_key("save_lab"): self.saveLab(form) elif form.has_key("cancel_lab"): self.cancelLabModification(form) elif form.has_key("delete_lab"): self.deleteLab(form) elif form.has_key("bug_report"): self.submitBug(form) elif form.has_key("send_order"): ###################################################################### # CHANGE SERVER NAME AND EMAIL TO YOUR LOCAL CREDENTIALS ###################################################################### userID = form.getvalue("curr_user_id") userDescr = form.getvalue("curr_username") from_email = uHandler.findEmail(userID) if not from_email: from_email = userDescr to_email = clone_request email_subject = userDescr + ": Clone Request" f_in = form.getvalue("outputContent") infile = open(f_in, "rb") msg = email.MIMEMultipart.MIMEMultipart() # msg.attach(email.MIMEText.MIMEText(infile.read())) # no, this attaches plain text msg["Subject"] = email_subject part = email.MIMEBase.MIMEBase("application", "octet-stream") part.set_payload(infile.read()) email.Utils.base64.standard_b64encode(infile.read()) part.add_header("Content-Disposition", 'attachment; filename="%s"' % os.path.basename(f_in)) msg.attach(part) server = smtplib.SMTP(mail_server) server.set_debuglevel(1) # Send a request to your clone request address server.sendmail(from_email, to_email, msg.as_string()) # AND send a copy to the user (change the subject) # msg['Subject'] = "Clone request confirmation" # doesn't change, investigate later # Return email text changed March 31/08 ####################################### # CHANGE TEXT AS NEEDED ####################################### msg.attach( email.MIMEText.MIMEText( "This is a copy of your clone request. Please retain for your records. You will be notified by e-mail when your clone is ready." ) ) server.sendmail(to_email, from_email, msg.as_string()) server.quit() # Method 2 # sendmail = "/usr/sbin/sendmail" # o = os.popen("%s -t" % sendmail,"w") # o.write("To: %s\r\n" % to_email) # if from_email: # o.write("From: %s\r\n" % from_email) # o.write("Subject: %s\r\n" % email_subject) # o.write("\r\n") # o.write("%s\r\n" % msg) # o.close() os.remove(f_in) # delete the file from /tmp dir utils.redirect(hostname + "User.php?View=8&Sent=1") # June 1, 2010: Automated password reset elif form.has_key("reset_pw"): # change June 2, 2010: Don't enter email, rather, ask users to enter their username - more secure # to_email = form.getvalue("email") from_email = mail_admin # success = True chars = string.letters + string.digits new_passwd = "" for i in range(10): new_passwd += choice(chars) # reset it in the database if form.has_key("uName"): u_name = form.getvalue("uName") userID = uHandler.findUserIDByUsername(u_name) if userID > 0: u_descr = uHandler.findDescription(userID) to_email = uHandler.findEmail(userID) uHandler.setUserPropertyValue(userID, "password", new_passwd) email_subject = "OpenFreezer Password Change" msg = email.MIMEMultipart.MIMEMultipart() # msg.attach(email.MIMEText.MIMEText(infile.read())) # no, this attaches plain text msg["Subject"] = email_subject ################################### # CHANGE TEXT AS NEEDED ################################### msg.attach( email.MIMEText.MIMEText( "Dear " + u_descr + ",\n\nYour password for OpenFreezer has been changed.\n\nYour temporary new password is: " + new_passwd + ".\n\nPlease change the temporary password as soon as you log into the system.\n\nYour username for OpenFreezer is '" + u_name + "'.\n\nFor any questions, please refer to http://openfreezer.org. \n\nSincerely,\nOpenFreezer support team.\n--------------------------------\nThis is an automatically generated e-mail message. Please do not reply to this e-mail. All questions should be directed to your local administrator." ) ) server = smtplib.SMTP(mail_server) server.set_debuglevel(1) server.sendmail(from_email, to_email, msg.as_string()) server.quit() utils.redirect(hostname + "User.php?View=6&Reset=1&uid=" + ` userID `) else: # retry by description if form.has_key("uDesc"): u_descr = form.getvalue("uDesc") # but account for whitespace toks = u_descr.split(" ") tmp_descr = "" for tok in toks: tmp_descr += tok.strip() + " " # strip extra whitespace from end tmp_descr = tmp_descr.strip() userID = uHandler.findUserIDByDescription(tmp_descr) if userID > 0: u_name = uHandler.findUsername(userID) to_email = uHandler.findEmail(userID) uHandler.setUserPropertyValue(userID, "password", new_passwd) email_subject = "OpenFreezer Password Change" msg = email.MIMEMultipart.MIMEMultipart() # msg.attach(email.MIMEText.MIMEText(infile.read())) # no, this attaches plain text msg["Subject"] = email_subject ############################## # CHANGE TEXT AS NEEDED ############################## msg.attach( email.MIMEText.MIMEText( "Dear " + u_descr + ",\n\nYour password for OpenFreezer has been changed.\n\nYour temporary new password is: " + new_passwd + ".\n\nPlease change the temporary password as soon as you log into the system.\n\nYour username for OpenFreezer is '" + u_name + "'.\n\nPlease refer to http://openfreezer.org for additional support.\n\nSincerely,\nOpenFreezer support team.\n--------------------------------\nThis is an automatically generated e-mail message. Please do not reply to this e-mail. All questions should be directed to <a href='mailto:" + mail_admin + "'>" + mail_admin + "</a>" ) ) server = smtplib.SMTP(mail_server) server.set_debuglevel(1) server.sendmail(from_email, to_email, msg.as_string()) server.quit() utils.redirect(hostname + "User.php?View=6&Reset=1&uid=" + ` userID `) else: utils.redirect(hostname + "User.php?View=6&Reset=0") else: utils.redirect(hostname + "User.php?View=6&Reset=0") else: utils.redirect(hostname + "User.php?View=6&Reset=0") cursor.close() db.close()
def addUser(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname mail_server = self.__mail_server # August 19, 2011 mail_programmer = self.__mail_programmer # July 30, 2010 mail_biologist = self.__mail_biologist mail_admin = self.__mail_admin #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` uHandler = UserHandler(db, cursor) lHandler = LabHandler(db, cursor) pHandler = ProjectDatabaseHandler(db, cursor) ucMapper = UserCategoryMapper(db, cursor) category_Name_ID_Map = ucMapper.mapCategoryNameToID() # Get form values labID = int(form.getvalue("labs")) username = form.getvalue("username") firstName = form.getvalue("firstName") lastName = form.getvalue("lastName") description = firstName + " " + lastName to_email = form.getvalue("email") from_email = mail_admin # Change July 30, 2010 - random password generator #passwd = form.getvalue("password") chars = string.letters + string.digits passwd = "" for i in range(10): passwd += choice(chars) # System access level: Lab default or override? #if form.getvalue("privChoiceRadio") == 'override': accessLevel = category_Name_ID_Map[form.getvalue( "system_access_level")] #else: #accessLevel = lHandler.findDefaultAccessLevel(labID) newProps = {} try: # Insert User information userID = uHandler.insertUser(username, firstName, lastName, description, accessLevel, to_email, passwd, labID) #newUser = uHandler.getUserByID(userID) tmpLab = lHandler.findLabByID(labID) #print tmpLab.getName() # Insert Project info # Sept. 11/07: Differentiate between user categories Reader and Writer - different field names if form.has_key("userProjectsReadonly"): # list of IDs readonlyProjects = utils.unique( form.getlist("userProjectsReadonly")) #print `readonlyProjects` pHandler.insertMemberProjects(userID, readonlyProjects, 'Reader') elif form.has_key("userProjectsReadonlyWrite"): # list of IDs readonlyProjects = utils.unique( form.getlist("userProjectsReadonlyWrite")) #print `readonlyProjects` pHandler.insertMemberProjects(userID, readonlyProjects, 'Reader') # Write projects exist only for Writers if form.has_key("userProjectsWrite"): writeProjects = utils.unique(form.getlist("userProjectsWrite")) pHandler.insertMemberProjects(userID, writeProjects, 'Writer') # don't assign projects to a User instance - will retrieve them from db in output function newUser = User(userID, username, firstName, lastName, description, tmpLab, form.getvalue("system_access_level"), to_email, passwd, [], []) email_subject = "OpenFreezer User Account" msg = email.MIMEMultipart.MIMEMultipart('alternative') msg['Subject'] = email_subject msg['To'] = to_email msgText = "Hi " + firstName + ",<BR><BR>An OpenFreezer account has been created for you. Your access level is " + form.getvalue( "system_access_level") + ", so you can " if form.getvalue("system_access_level") == 'Reader': msgText += "search for clones. If you wish to add/modify reagents or create projects, please contact the administrator to upgrade your access level.<BR>" elif form.getvalue("system_access_level") == 'Writer': msgText += "search, add, and modify reagents. If you wish to create projects, please contact the administrator to upgrade your access level.<BR>" elif form.getvalue("system_access_level") == 'Creator': msgText += "search for clones, add and modify reagents, as well as create your own projects.<BR>" ##################################################### # CHANGE TEXT AS NEEDED ##################################################### msgText += "<BR>The URL to access the system is <a href='" + hostname + "'>" + hostname + "</a>. Your username is <b>" + username + "</b>, and your temporary password is <b>" + passwd + "</b>. Please <u>change the temporary password as soon as you log into the website</u> - you can do it through the 'Change your password' link under the 'User Management' menu section.<BR><BR>Please refer to http://openfreezer.org for additional support.<BR><BR>Sincerely,<BR>OpenFreezer support team.<BR><BR><span style='font-family:Courier; font-size:10pt;'><HR>This is an automatically generated e-mail message. Please do not reply to this e-mail. All questions should be directed to your local administrator.</span>" msgText = email.MIMEText.MIMEText(msgText, 'html') msg.attach(msgText) server = smtplib.SMTP(mail_server) server.set_debuglevel(1) server.sendmail(from_email, [to_email], msg.as_string()) server.quit() self.printUserInfo('view', newUser) except DeletedUserException: # Without asking too many questions, reactivate the deleted user and overwrite his/her attributes with the form input values userID = uHandler.findUserIDByUsername(username) newProps["firstname"] = firstName newProps["lastname"] = lastName newProps["description"] = description newProps["email"] = email newProps["status"] = "ACTIVE" newProps["password"] = passwd # Insert new database values and create new object uHandler.updateUserProperties(userID, newProps) # database update newUser = uHandler.getUserByID(userID) # Insert Project info readProjects = [] writeProjects = [] if form.has_key("userProjectsReadonly"): # list of IDs readonlyProjects = form.getlist("userProjectsReadonly") for r in readonlyProjects: pHandler.addProjectMember(r, userID, 'Reader') #tmpReadProject = pHandler.findPacket(r) #readProjects.append(tmpReadProject) #newUser.addProject(tmpReadProject, 'read') if form.has_key("userProjectsWrite"): writeProjects = form.getlist("userProjectsWrite") for w in writeProjects: pHandler.addProjectMember(w, userID, 'Writer') #tmpWriteProject = pHandler.findPacket(w) #writeProjects.append(tmpWriteProject) #newUser.addProject(tmpWriteProject, 'write') #newUser.setReadProjects(readProjects) #newUser.setWriteProjects(writeProjects) self.printUserInfo('view', newUser) #utils.redirect(hostname + "User.php?View=3&fd=" + filename) except DuplicateUsernameException: # return to the view with input values and error message # Need to construct a dummy User instance to save form values for error output on the next page (otherwise they're lost as soon as Submit is pressed and creation view is exited) newLab = lHandler.findLabByID(labID) newUser = User(0, username, firstName, lastName, description, newLab, "", email, passwd) self.printUserInfo('create', newUser)
def saveProject(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` # Handlers pHandler = ProjectDatabaseHandler(db, cursor) uHandler = UserHandler(db, cursor) # Get project ID from form projectID = form.getvalue("packetID") ownerID = form.getvalue("packetOwner") # get owner's name packetOwner = uHandler.getUserByID(ownerID) packetName = form.getvalue("packetName") packetDescription = form.getvalue("packetDescription") # private or public if form.getvalue("private_or_public") == "public": isPrivate = False else: isPrivate = True # Lists of project readers & editors # Updated Sept. 3/08: Do NOT save readers for a public project if isPrivate: projectReaderIDs = form.getlist("readersList") else: projectReaderIDs = [] # writers are always needed projectWriterIDs = form.getlist("writersList") projectReaders = [] projectWriters = [] for rID in projectReaderIDs: tmpReader = uHandler.getUserByID(rID) projectReaders.append(tmpReader) for wID in projectWriterIDs: tmpWriter = uHandler.getUserByID(wID) # check categories - a Reader cannot be given Write access to a project if tmpWriter.getCategory() != 'Reader': projectWriters.append(tmpWriter) #projectWriters.append(tmpWriter) # Update database values pHandler.updatePacket(projectID, ownerID, packetName, packetDescription, isPrivate, projectReaderIDs, projectWriterIDs) # Output new values newProject = Packet(projectID, packetName, packetDescription, packetOwner, isPrivate, projectReaders, projectWriters) self.showProjectDetails('view', newProject)
def saveProject(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` # Handlers pHandler = ProjectDatabaseHandler(db, cursor) uHandler = UserHandler(db, cursor) # Get project ID from form projectID = form.getvalue("packetID") ownerID = form.getvalue("packetOwner") # get owner's name packetOwner = uHandler.getUserByID(ownerID) packetName = form.getvalue("packetName") packetDescription = form.getvalue("packetDescription") # private or public if form.getvalue("private_or_public") == "public": isPrivate = False else: isPrivate = True # Lists of project readers & editors # Updated Sept. 3/08: Do NOT save readers for a public project if isPrivate: projectReaderIDs = form.getlist("readersList") else: projectReaderIDs = [] # writers are always needed projectWriterIDs = form.getlist("writersList") projectReaders = [] projectWriters = [] for rID in projectReaderIDs: tmpReader = uHandler.getUserByID(rID) projectReaders.append(tmpReader) for wID in projectWriterIDs: tmpWriter = uHandler.getUserByID(wID) # check categories - a Reader cannot be given Write access to a project if tmpWriter.getCategory() != 'Reader': projectWriters.append(tmpWriter) #projectWriters.append(tmpWriter) # Update database values pHandler.updatePacket(projectID, ownerID, packetName, packetDescription, isPrivate, projectReaderIDs, projectWriterIDs) # Output new values newProject = Packet(projectID, packetName, packetDescription, packetOwner, isPrivate, projectReaders, projectWriters) self.showProjectDetails('view', newProject)
def saveUser(self, form): db = self.__db cursor = self.__cursor hostname = self.__hostname #print "Content-type:text/html" # TEMPORARY, REMOVE AFTER DEBUGGING TO HAVE SCRIPT REDIRECT PROPERLY!!!!!! #print # DITTO #print `form` uHandler = UserHandler(db, cursor) lHandler = LabHandler(db, cursor) pHandler = ProjectDatabaseHandler(db, cursor) ucMapper = UserCategoryMapper(db, cursor) category_ID_Name_Map = ucMapper.mapCategoryIDToName() newProps = {} # Get form values userID = int(form.getvalue("userID")) newUser = uHandler.getUserByID(userID) labID = int(form.getvalue("labs")) tmpLab = lHandler.findLabByID(labID) # rest of user properties username = form.getvalue("username") firstName = form.getvalue("firstName") lastName = form.getvalue("lastName") description = firstName + " " + lastName email = form.getvalue("email") category = category_ID_Name_Map[int( form.getvalue("system_access_level"))] newProps["labID"] = labID newProps["username"] = username newProps["firstname"] = firstName newProps["lastname"] = lastName newProps["description"] = description newProps["email"] = email newProps["category"] = category try: # Now do an update on database level AND on class level: uHandler.updateUserProperties(userID, newProps) # database update # Interface level newUser.setUsername(username) newUser.setFirstName(firstName) newUser.setLastName(lastName) newUser.setDescription(description) newUser.setEmail(email) newUser.setLab(tmpLab) newUser.setCategory(category) # update list of user's projects if form.has_key("userProjectsReadonly"): # list of IDs readonlyProjects = utils.unique( form.getlist("userProjectsReadonly")) pHandler.updateUserProjects(userID, readonlyProjects, 'Reader') else: # safe to assume should delete projects? pHandler.deleteMemberProjects(userID, 'Reader') if form.has_key("userProjectsWrite"): writeProjects = utils.unique(form.getlist("userProjectsWrite")) pHandler.updateUserProjects(userID, writeProjects, 'Writer') else: # safe to assume should delete projects? pHandler.deleteMemberProjects(userID, 'Writer') # think about this #newUser.setReadProjects(readProjects) #newUser.setWriteProjects(writeProjects) # return to detailed view self.printUserInfo('view', newUser) #utils.redirect(hostname + "User.php?View=3&fd=" + filename) except DuplicateUsernameException: # return to the view with input values and error message # Need to construct a dummy User instance to save form values for error output on the next page (otherwise they're lost as soon as Submit is pressed and creation view is exited) newLab = lHandler.findLabByID(labID) newUser = User(userID, username, firstName, lastName, description, newLab, category, email, "") self.printUserInfo('edit', newUser, "Dup_un")