def subscriberInfo(self, folder): """ get info for all subscribers of the newsletter """ logger = getLogger('subscriber export') info = [] for subscriber in folder.objectValues('Subscriber'): si = ISubscriberInfo(subscriber) if si.isActive(): try: data = si.getInfo() except KeyError: logger.error('cannot get info for subscriber %r', subscriber) continue for key, value in data.items(): key = field_map.get(key, key) if isinstance(value, basestring): try: data[key] = safe_unicode(value).encode('iso-8859-1') except UnicodeEncodeError: logger.error('cannot encode info for subscriber %r', subscriber) info.append(data) return info
errors['email'] = translate(msgid='email_required', default='Please enter a mail address.', domain='plonegazette') elif context.alreadySubscriber(request.form.get('email')): errors['email'] = translate(msgid='already_subscriber', default='There is already a subscriber with this address', domain='plonegazette') if errors: return request.form.copy(), errors data, errors = context.subscribeFormProcess(request) wftool = getToolByName(context, 'portal_workflow') portal = getToolByName(context, 'portal_url').getPortalObject() # TODO: the nlpath is hardcoded for now, should be made dynamic nlpath= 'service/newsletter/sifatipp-karriere' newsletter = portal.restrictedTraverse(nlpath) validChars = [c for c in string.letters + string.digits if ord(c) < 128] newId = ''.join([random.choice(validChars) for x in range(5)]) subscriber = newsletter.createSubscriberObject(newId) subscriber.edit(active=True, email=request.form.get('email')) info = ISubscriberInfo(subscriber) info.setInfo(firstName=get('firstName'), lastName=get('lastName'), salutation=get('salutation')) wftool.doActionFor(subscriber, 'publish') return data, errors