def setMemberPassword(self, member, password):
     oldm.setMemberPassword(self, member, password)
     database = self._dbconnect()
     store = Store(database)
     result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") ,  StormMembers.listname == unicode(self.list,"utf-8"))
   	result.set(password = unicode(password,"utf-8"))
     store.commit()
 def changeMemberAddress(self, member, newaddress, nodelete=0):
     """Change member address"""
     database = self._dbconnect()
     store = Store(database)
     result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"))
     result.set(address = unicode(newaddress,"utf-8"))
     store.commit()
     oldm.changeMemberAddress(self, member, newaddress, nodelete)
 def removeMember(self, member):
     """Remove member from db"""
     database = self._dbconnect()
     store = Store(database)
     result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"))
     result.remove()
     store.commit()
     oldm.removeMember(self,member)
 def setMemberLanguage(self, member, language):
     oldm.setMemberLanguage(self, member, language)
     database = self._dbconnect()
     store = Store(database)
     result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"))
     try:
         result.set(lang = unicode(language,"utf-8"))
     except:
         result.set(lang = language)
     store.commit()
 def setMemberName(self, member, realname):
     oldm.setMemberName(self, member, realname)
     database = self._dbconnect()
     store = Store(database)
     result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8"), StormMembers.listname == unicode(self.list,"utf-8"))
     try:
         result.set(name = unicode(realname,"utf-8"))
     except:
         result.set(name = realname)
     store.commit()
 def setMemberTopics(self, member, topics):
     oldm.setMemberTopics(self, member, topics)
     if topics is None:
         oldm.setMemberTopics(self, member, topics)
         return
     database = self._dbconnect()
     store = Store(database)
     result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8"), StormMembers.listname == unicode(self.list,"utf-8"))
     result.set(topics_userinterest = unicode(topics,"utf-8"))
     store.commit()
 def changeMemberAddress(self, member, newaddress, nodelete=1):
     subscriber = DlistUtils.Subscriber(self.__mlist)
     oldm.changeMemberAddress(self, member, newaddress, nodelete=0)  #changed nodelete to 0 - Anna
     memberkey = member.lower()
     if DlistUtils.enabled(self.__mlist):
         subscriber.changeAddress(memberkey, newaddress)
     database = self._dbconnect()
     store = Store(database)
     result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"))
     result.set(address = unicode(newaddress,"utf-8"))
     store.commit()
 def setBounceInfo(self, member, info):
     oldm.setBounceInfo(self, member, info)
     database = self._dbconnect()
     store = Store(database)
     result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8"), StormMembers.listname == unicode(self.list,"utf-8"))
     if info is None:
         result.set(bounce_info = unicode("","utf-8"))
         result.set(delivery_status_timestamp = 0)
     else:
         result.set(bounce_info = unicode(info,"utf-8"))
     store.commit()
    def removeMember(self, member, affect_dlist_database=1):
        subscriber = DlistUtils.Subscriber(self.__mlist)
        oldm.removeMember(self, member)
        memberkey = member.lower()
        if affect_dlist_database and DlistUtils.enabled(self.__mlist):
            subscriber.unsubscribeFromList(memberkey)

        database = self._dbconnect()
        store = Store(database)
        result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"))
        result.remove()
        store.commit()
    def setMemberOption(self, member, flag, value):
        subscriber = DlistUtils.Subscriber(self.__mlist)
        oldm.setMemberOption(self, member, flag, value)
        if flag == mm_cfg.Digests and DlistUtils.enabled(self.__mlist):
            subscriber.setDigest(self.__mlist, member, value)
        missing = []
        database = self._dbconnect()
        store = Store(database)
        result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"))
        
        if flag == mm_cfg.Digests:
            if value:
                # Be sure the list supports digest delivery
                if not self.__mlist.digestable:
                    raise Errors.CantDigestError
                # The user is turning on digest mode
                for members in result:
                    if(members.digest == unicode("Y","utf-8")):
                        raise Errors.AlreadyReceivingDigests, member
                cpuser = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"), StormMembers.digest == unicode("N","utf-8"))
                if cpuser is None:
                    raise Errors.NotAMemberError, member
                result.set(digest = u"Y")
                store.commit()
            else:
                # Be sure the list supports regular delivery
                if not self.__mlist.nondigestable:
                    raise Errors.MustDigestError
                # The user is turning off digest mode
                for members in result:
                    if(members.digest == unicode("N","utf-8")):
                        raise Errors.AlreadyReceivingRegularDeliveries, member
                cpuser = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"), StormMembers.digest == unicode("Y","utf-8"))
                if cpuser is None:
                    raise Errors.NotAMemberError, member
                result.set(digest = u"N")
                store.commit()
                # When toggling off digest delivery, we want to be sure to set
                # things up so that the user receives one last digest,
                # otherwise they may lose some email
                #self.__mlist.one_last_digest[memberkey] = cpuser
            # We don't need to touch user_options because the digest state
            # isn't kept as a bitfield flag.
            return
        options = 0
        if value:
            options = options|flag
        else:
            options = options & ~flag

        result.set(user_options = options)
        store.commit()
    def setDeliveryStatus(self, member, status):
        assert status in (MemberAdaptor.ENABLED,  MemberAdaptor.UNKNOWN,
                          MemberAdaptor.BYUSER,   MemberAdaptor.BYADMIN,
                          MemberAdaptor.BYBOUNCE)

        if status == MemberAdaptor.ENABLED:
            self.setBounceInfo(member,None)
        else:
            database = self._dbconnect()
            store = Store(database)
            time = datetime.datetime.now()
            result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"))
            result.set(delivery_status = status)
            #result.set(delivery_status_timestamp = unicode(time.ctime(),"utf-8"))
            result.set(delivery_status_timestamp = time)
            store.commit()
        oldm.setDeliveryStatus(self, member, status)
    def setDeliveryStatus(self, member, status):
        oldm.setDeliveryStatus(self, member, status)
        subscriber = DlistUtils.Subscriber(self.__mlist)
        memberkey = member.lower()
        enabled = (status == MemberAdaptor.ENABLED)
        if DlistUtils.enabled(self.__mlist):
            subscriber.setDisable(member, (not enabled))
        assert status in (MemberAdaptor.ENABLED,  MemberAdaptor.UNKNOWN,
                          MemberAdaptor.BYUSER,   MemberAdaptor.BYADMIN,
                          MemberAdaptor.BYBOUNCE)

        if status == MemberAdaptor.ENABLED:
            self.setBounceInfo(member,None)
        else:
            database = self._dbconnect()
            store = Store(database)
            time = datetime.datetime.now()
            result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"))
            result.set(delivery_status = status)
            #result.set(delivery_status_timestamp = unicode(time.ctime(),"utf-8"))
            result.set(delivery_status_timestamp = time)
            store.commit()
    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 __init__(self, mlist):
     oldm.__init__(self, mlist)
     self.__mlist = mlist
     self.list = self.__mlist.internal_name()
 def getDeliveryStatusMembers(self, status=(MemberAdaptor.UNKNOWN,
                                            MemberAdaptor.BYUSER,
                                            MemberAdaptor.BYADMIN,
                                            MemberAdaptor.BYBOUNCE)):
     return [member for member in oldm.getMembers(self)
             if self.getDeliveryStatus(member) in status]
    def addNewMember(self, member, **kws):
        if kws.has_key("affect_dlist_database"):
            affect_dlist_database = kws["affect_dlist_database"]
            del kws["affect_dlist_database"]
        else:
            affect_dlist_database = True
        if kws.has_key("digest"):
            digest = kws["digest"]
        else:
            digest = False
        subscriber = DlistUtils.Subscriber(self.__mlist)
        oldm.addNewMember(self, member, **kws)
        if affect_dlist_database:
            if DlistUtils.enabled(self.__mlist):
                subscriber.subscribeToList(member)
                if digest:
                    subscriber.setDigest(member, 1)

#        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()