Exemplo n.º 1
0
    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")
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 def __call__(self, context):
     VALUES = {_(u"Mrs."): 'mrs',
               _(u"Mr."): 'mr'}
     return SimpleVocabulary([SimpleTerm(value, title=title)
                             for title, value
                             in VALUES.iteritems()])