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 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")