def getMemberTopics(self, member):
        if not oldm.isMember(self,member):
            raise Errors.MMAlreadyAMember, member

        database = self._dbconnect()
        store = Store(database)
        missing = []
        try:
            result = store.find(StormMembers,StormMembers.address == unicode(member,"utf-8"),StormMembers.listname == unicode(self.list,"utf-8"))
        except:
            result = store.find(StormMembers,StormMembers.address == member , StormMembers.listname == unicode(self.list,"utf-8"))

        if result is not missing:
            for members in result:
                topics = members.topics_userinterest
            return topics
    def getDeliveryStatusChangeTime(self, member):
        if not oldm.isMember(self,member):
            raise Errors.MMAlreadyAMember, member

        database = self._dbconnect()
        store = Store(database)
        missing = []
        delivery_status_changetime = 0
        try:
            result = store.find(StormMembers,StormMembers.address == unicode(member,"utf-8"),StormMembers.listname == unicode(self.list,"utf-8"))
        except:
            result = store.find(StormMembers,StormMembers.address == member , StormMembers.listname == unicode(self.list,"utf-8"))

        if result is not missing:
            for members in result:
                delivery_status_changetime = members.delivery_status_timestamp
	    return delivery_status_changetime
    def getMemberLanguage(self, member):
        if not oldm.isMember(self,member):
            raise Errors.MMAlreadyAMember, member

        database = self._dbconnect()
        store = Store(database)
        missing = []
        try:
            result = store.find(StormMembers,StormMembers.address == unicode(member,"utf-8"),StormMembers.listname == unicode(self.list,"utf-8"))
        except:
            result = store.find(StormMembers,StormMembers.address == member , StormMembers.listname == unicode(self.list,"utf-8"))

        if result is not missing:
            for members in result:
                language = members.lang 
            if language in self.__mlist.GetAvailableLanguages():
                return language
        return self.__mlist.preferred_language
    def addNewMember(self, member, **kws):
        """Add new member to the database"""

        if oldm.isMember(self,member):
            raise Errors.MMAlreadyAMember, member
             
        database = self._dbconnect()
        store = Store(database)
        newMember = StormMembers()


        # Parse the keywords
        digest = 0
        password = Utils.MakeRandomPassword()
        language = self.__mlist.preferred_language
        realname = None

        if kws.has_key('digest'):
            digest = kws['digest']
            del kws['digest']
        if kws.has_key('password'):
            password = kws['password']
            del kws['password']
        if kws.has_key('language'):
            language = kws['language']
            del kws['language']
        if kws.has_key('realname'):
            realname = kws['realname']
            del kws['realname']
        # Assert that no other keywords are present
        if kws:
            raise ValueError, kws.keys()

        newMember.delivery_status = MemberAdaptor.ENABLED
        try:
            newMember.listname = unicode(self.list,"utf-8")
        except:
            newMember.listname = self.list
        try:
            newMember.password = unicode(password,"utf-8")
        except:
            newMember.password = password
        try:
            newMember.lang = unicode(language,"utf-8")
        except:
            newMember.lang = language
        try:
            newMember.address   = unicode(member,"utf-8")
        except:
            newMember.address   = member

        if realname:
            try:
                newMember.name = unicode(realname,"utf-8")
            except:
                newMember.name = realname

        # Set the member's default set of options
        if self.__mlist.new_member_options:
            newMember.user_options = self.__mlist.new_member_options

        # If the localpart has uppercase letters in it, then the value in the
        # members (or digest_members) dict is the case preserved address.
        # Otherwise the value is 0.  Note that the case of the domain part is
        # of course ignored.
        #if Utils.LCDomain(member) == member.lower():
        #    value = 0
        #else:
        #    value = member


        if digest:
            newMember.digest = u"Y"
        else:
            newMember.digest = u"N"
        
        store.add(newMember)
        store.commit()
	oldm.addNewMember(self,member,**kws)