def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return # Process uplaoded file and import member records userdata = data['csvfile'].data member_records = self.processMemberRecordsFile(userdata) if member_records is not None: IStatusMessage(self.request).addStatusMessage( _(u"Imported member records: ") + unicode(member_records), "info")
def processMemberRecordsFile(self, data): """ Process the uploaded file and import member records """ context = aq_inner(self.context) logger = getLogger('Userimport') io = StringIO.StringIO(data) reader = csv.reader(io, delimiter=';', dialect="excel", quotechar='"') header = reader.next() regtool = getToolByName(context, 'portal_registration') mtool = getToolByName(self, 'portal_membership') groups_tool = getToolByName(context, 'portal_groups') processed_records = 0 for row in reader: uid = self.getSpecificRecord(header, row, name=u'username') pwd = self.getSpecificRecord(header, row, name=u'password') firstname = self.getSpecificRecord(header, row, name=u'first_name') lastname = self.getSpecificRecord(header, row, name=u'last_name') fullname = self.getSpecificRecord(header, row, name=u'name') email = self.getSpecificRecord(header, row, name=u'email') street = self.getSpecificRecord(header, row, name=u'address') zipcode = self.getSpecificRecord(header, row, name=u'zip') city = self.getSpecificRecord(header, row, name=u'city') company = self.getSpecificRecord(header, row, name=u'company') customer = self.getSpecificRecord(header, row, name=u'title') phone = self.getSpecificRecord(header, row, name=u'telephone') fax = self.getSpecificRecord(header, row, name=u'fax') country = self.getSpecificRecord( header, row, name=u'static_info_country') comment = self.getSpecificRecord(header, row, name=u'comments') groups = self.getSpecificRecord(header, row, name=u'usergroup') gender = self.getSpecificRecord(header, row, name=u'gender') if gender == '1': salutation = u'Frau' else: salutation = u'Herr' properties = { 'username': uid.lower(), 'fullname': fullname.encode('utf-8'), 'email': email, 'firstname': firstname, 'lastname': lastname, 'street': street, 'zipcode': zipcode, 'city': city, 'country': country, 'company': company, 'customer': customer, 'fax': fax, 'phone': phone, 'comment': comment, 'salutation': salutation, 'groups': groups, } username = str(uid) logger.info('Processing user: %s' % username) if not self.is_ascii(username): IStatusMessage(self.request).addStatusMessage( _(u"Username must contain only characters a-z"), "error") return None if mtool.getMemberById(uid) is None: try: pwd = pwd.encode('utf-8') member = regtool.addMember(uid, pwd, properties=properties) logger.info('Added user: %s' % username) except ValueError, e: IStatusMessage(self.request).addStatusMessage( _(u"Could not create user:"******"error") return None if groups: for group in groups.split(','): username = member.getUsername() if group == '2': groups_tool.addPrincipalToGroup( username, "Worldwide") if group == '3': groups_tool.addPrincipalToGroup( username, "GermanSpeakingCountries") if group == '4': groups_tool.addPrincipalToGroup( username, "Netherlands") processed_records += 1
def __call__(self, context): VALUES = {_(u"Mrs."): 'mrs', _(u"Mr."): 'mr'} return SimpleVocabulary([SimpleTerm(value, title=title) for title, value in VALUES.iteritems()])