def make_digest_subscriber(self, subscriber): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: # submitted email address, is connected to a user if user_id not in self.members: raise ValueError('%s (username: %s) is not a subscriber' % (subscriber, user_id)) if subscriber in self.digest_emails: # clean up lingering email digest sub del(self.digest_emails[subscriber]) if user_id not in self.digest_members: self.digest_members[user_id] = None else: # submitted email address, no connected user if subscriber not in self.emails: raise ValueError('%s is not a subscriber' % subscriber) if subscriber not in self.digest_emails: self.digest_emails[subscriber] = None else: # submitted user id email = lookup_email(subscriber, self.context) if subscriber not in self.members: raise ValueError('%s is not a subscriber' % subscriber) if email in self.digest_emails: # clean up lingering email digest sub del(self.digest_emails[email]) if subscriber not in self.digest_members: self.digest_members[subscriber] = None
def remove_allowed_sender(self, allowed_sender, send_notify=True): was_subscribed = False if is_email(allowed_sender): user_id = lookup_member_id(allowed_sender, self.context) if user_id: if user_id in self.members: record = self.members.pop(user_id) if record.get("subscriber") == True: was_subscribed = True if allowed_sender in self.emails: record = self.emails.pop(allowed_sender) if record.get("subscriber") == True: was_subscribed = True else: email = lookup_email(allowed_sender, self.context) if email in self.emails: record = self.email.pop(email) if record.get("subscriber") == True: was_subscribed = True if allowed_sender in self.members: record = self.members.pop(allowed_sender) if record.get("subscriber") == True: was_subscribed = True if send_notify: if was_subscribed: self._notify_removed_subscriber(allowed_sender) self._notify_removed_allowed_sender(allowed_sender)
def getAddressInfo(obj, subscription_manager): if subscription_manager is not None: from_name, from_addr = parseaddr(obj.from_addr) user = lookup_member_id(from_addr, obj) if user is not None: return user, obj.from_addr return None, obj.from_addr
def export_subscribers(self, include_allowed_senders=False): """ Returns CSV string of subscriber data """ ml = IMembershipList(self.context) cat = getToolByName(self.context, 'portal_catalog') md = getToolByName(self.context, 'portal_memberdata') md_path = '/'.join(md.getPhysicalPath()) file_data = [] for email in ml.subscribers: memid = lookup_member_id(email, self.context) if memid: metadata = cat.getMetadataForUID('%s/%s' % (md_path, memid)) # title gives the user's full name. It might be a good idea # to get the full object so we can directly access the full # name, but that'd be more expensive... title = metadata['Title'] else: # e-mail only subscriber memid = title = "" file_data.append(','.join([ memid, title, email, 'subscribed'])) if include_allowed_senders: for email, info in ml.allowed_senders_data.items(): if info['subscriber']: continue file_data.append(','.join([ '', '', email, 'allowed'])) return "\n".join(file_data)
def unmake_digest_subscriber(self, subscriber): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: # submitted email, but has user; check and clear both # digest_members and digest_emails to be safe if (user_id not in self.digest_members and subscriber not in self.digest_emails): raise ValueError('%s (username: %s) is not a digest' ' subscriber' % (subscriber, user_id)) if user_id in self.digest_members: del(self.digest_members[user_id]) if subscriber in self.digest_emails: del(self.digest_emails[subscriber]) else: # submitted email, no user if subscriber not in self.digest_emails: raise ValueError('%s is not a digest subscriber' % subscriber) del(self.digest_emails[subscriber]) else: # submitted user id; check and clear both digest_members # and digest_emails to be safe email = lookup_email(subscriber, self.context) if (subscriber not in self.digest_members and email not in self.digest_emails): raise ValueError('%s is not a digest subscriber' % subscriber) if subscriber in self.digest_members: del(self.digest_members[subscriber]) if email in self.digest_emails: del(self.digest_emails[email])
def getAddressInfo(obj, subscription_manager): if subscription_manager is not None: from_name, from_addr = parseaddr(obj.from_addr) user = lookup_member_id(from_addr, obj) if user is not None: return user, obj.from_addr return None, obj.from_addr
def is_digest_subscriber(self, subscriber): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: return (user_id in self.digest_members or subscriber in self.digest_emails) return subscriber in self.digest_emails email = lookup_email(subscriber, self.context) return (subscriber in self.digest_members or email in self.digest_emails)
def is_allowed_sender(self, allowed_sender): if is_email(allowed_sender): user_id = lookup_member_id(allowed_sender, self.context) if user_id: return user_id in self.members or allowed_sender in self.emails else: return allowed_sender in self.emails else: email = lookup_email(allowed_sender, self.context) return allowed_sender in self.members or email in self.emails
def is_subscribed(self, subscriber): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: return self.members.get(user_id, {}).get('subscriber', False) or self.emails.get(subscriber, {}).get('subscriber', False) else: return self.emails.get(subscriber, {}).get('subscriber', False) else: email = lookup_email(subscriber, self.context) return self.members.get(subscriber, {}).get('subscriber', False) or self.emails.get(email, {}).get('subscriber', False)
def subscribe(self, subscriber): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: self._add_member(user_id) else: if subscriber not in self.emails: self.emails[subscriber] = OOBTree() else: self._add_member(subscriber)
def is_subscribed(self, subscriber): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: return user_id in self.members or subscriber in self.emails else: return subscriber in self.emails else: email = lookup_email(subscriber, self.context) return subscriber in self.members or email in self.emails
def add_allowed_sender(self, allowed_sender, send_notify=True): if is_email(allowed_sender): user_id = lookup_member_id(allowed_sender, self.context) if user_id: self._add_member(user_id, send_notify) else: if allowed_sender not in self.emails: self.emails[allowed_sender] = {'subscriber':False} if send_notify: self._notify_added_a_s(allowed_sender) else: self._add_member(allowed_sender, send_notify)
def unsubscribe(self, subscriber, send_notify=True): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: if user_id in self.members: self.members[user_id] = {'subscriber':False} if subscriber in self.emails: self.emails[subscriber] = {'subscriber':False} else: if subscriber in self.members: self.members[subscriber] = {'subscriber':False} if send_notify: self._notify_removed_subscriber(subscriber)
def unsubscribe(self, subscriber): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: if user_id in self.members: self.members.pop(user_id) if subscriber in self.emails: self.emails.pop(subscriber) else: email = lookup_email(subscriber, self.context) if email in self.emails: self.email.pop(email) if subscriber in self.members: self.members.pop(subscriber)
def enforce(self, request): action = request.get('action') user = request.get('email') if action is None or user is None: return MEMBERSHIP_ERROR user_email = is_email(user) and user or lookup_email(user, self.context) user_name = is_email(user) and lookup_member_id(user, self.context) or user if action == 'add_allowed_sender': self.a_s_mod_pending_list.add(user) elif action == 'subscribe': if self.mem_list.is_allowed_sender(user): return MEMBERSHIP_ALLOWED self.sub_mod_pending_list.add(user, user_name=user_name) else: return MEMBERSHIP_DENIED self.mail_sender.manager_mod(user_email, user_name) return MEMBERSHIP_DEFERRED
def subscribe(self, subscriber, send_notify=True): if is_email(subscriber): user_id = lookup_member_id(subscriber, self.context) if user_id: if user_id not in self.members and send_notify: self._notify_added_a_s(user_id) self.members[user_id] = {'subscriber':True} if subscriber in self.emails: self.emails.pop(subscriber) else: if subscriber not in self.emails and send_notify: self._notify_added_a_s(subscriber) self.emails[subscriber] = {'subscriber':True} else: if subscriber not in self.members and send_notify: self._notify_added_a_s(subscriber) self.members[subscriber] = {'subscriber':True} email = lookup_email(subscriber, self.context) if email in self.emails: self.emails.pop(email) if send_notify: self._notify_added_subscriber(subscriber)
def enforce(self, request): action = request.get('action') user = request.get('email') if action is None or user is None: return MEMBERSHIP_ERROR user_email = is_email(user) and user or lookup_email( user, self.context) user_name = is_email(user) and lookup_member_id(user, self.context) or user if action == 'add_allowed_sender': self.a_s_mod_pending_list.add(user) elif action == 'subscribe': if self.mem_list.is_allowed_sender(user): return MEMBERSHIP_ALLOWED self.sub_mod_pending_list.add(user, user_name=user_name) else: return MEMBERSHIP_DENIED self.mail_sender.manager_mod(user_email, user_name) return MEMBERSHIP_DEFERRED