def postUpdate(self): # publish if it isn't already: pw = getToolByName(self.context, 'portal_workflow') reviewState = pw.getInfoFor(self.context, 'review_state') if reviewState == 'draft': utilities.rename(self.context) pw.doActionFor(self.context, 'publish-for-site-members') # process invited externs: if getattr(self.context, 'invitedExterns', None): invitedExterns = self.context.invitedExterns.split(',') emailAddresses = set() for email in invitedExterns: email = email.strip() if covalent.validators.email(email): emailAddresses.add(email) urltool = getToolByName(self.context, 'portal_url') portal = urltool.getPortalObject() member_folder = portal['people'] for email in emailAddresses: member = get_member_by_email(email, member_folder) if member: # the member already exists self.context.inviteMember(member.id) continue # make member-objects (without invitation-mail) # become the owner of member_folder temporarily original_sm = getSecurityManager() member_folder_owner = member_folder.getOwner().getId() become_portal_user(portal, member_folder_owner) # add member uid = utilities.find_possible_id(email, member_folder) member = covalent.utilities.add_member_object( member_folder, uid, uid, email, sendInvitation=False) member.role = 'extern' member.activation_code = ''.join(random.sample( string.ascii_lowercase + string.digits, 8)) # become the normal user again setSecurityManager(original_sm) # put the new uid on the workspaces invited-list self.context.inviteMember(uid) # avoid the usual invitation mail self.alreadyInvited.add(uid) # send special invitation mail self.messenger.sendInvitationForExtern(uid) super(Edit, self).postUpdate()
def test_user_creation(self): login(self.portal, testing.MEMBER) member_folder = self.portal['people'] # become the owner of member_folder temporarily original_sm = getSecurityManager() member_folder_owner = member_folder.getOwner().getId() become_portal_user(self.portal, member_folder_owner) # create a user member = utilities.add_member_object(member_folder, member_id='member', fullname=u"Hörbert M@ier", email="*****@*****.**") # become the normal user again setSecurityManager(original_sm) self.assertIn('member', member_folder) member = member_folder['member'] message = self.mailhost.messages[-1] expectedMessageText = '\n'.join([ "Hello H=C3=B6rbert M@ier!", '', "Please follow this link to activate your account on Plone site:", member.absolute_url() + '/activate?activation_code=3D' + member.activation_code, '', '', ]) self.assertEqual(message.get_charset(), 'utf-8') self.assertIsInstance(message['To'], basestring) self.assertEqual(message['To'], u'Hörbert M[at]ier <*****@*****.**>') self.assertIsInstance(message['From'], basestring) self.assertEqual(message['From'], u'Plone site <>') self.assertEqual(unicode(message['Subject']), u"You've been invited to Plone site") self.assertEqual(message.get_payload(), expectedMessageText)
def test_user_creation(self): """ Test user creation by Site Admin with automatic approval. """ login(self.portal, testing.SITE_ADMIN) member_folder = self.portal['people'] # become the owner of member_folder temporarily original_sm = getSecurityManager() member_folder_owner = member_folder.getOwner().getId() become_portal_user(self.portal, member_folder_owner) # create a user member = utilities.add_member_object(member_folder, member_id='herbert', fullname=u"Hörbert M@ier", email="*****@*****.**") # become the normal user again setSecurityManager(original_sm) self.assertIn('herbert', member_folder) member = member_folder['herbert'] pw = getToolByName(self.portal, 'portal_workflow') self.assertEqual(pw.getInfoFor(member, 'review_state'), 'pending') self.assertEqual(member.title, u"Hörbert M@ier") self.assertEqual(member.emailAddress, "*****@*****.**") message = self.mailhost.messages[-1] expectedMessageTpl = """Hello {name}! You have been invited to the {site_title} site. Please follow this link to activate your account on the {site_title} site: {url}/activate?activation_code={activation_code} This activation link is valid for {activation_period} days. Your username is: {userId} """ registry = getUtility(IRegistry) activation_period = registry['cnrd.vctypes.memberActivationTimeout'] tplParams = { 'url': member.absolute_url(), 'activation_code': member.activation_code, 'activation_period': activation_period, 'userId': 'herbert', 'site_title': 'Plone site', 'name': 'Hörbert M@ier' } expectedMessageText = expectedMessageTpl.format(**tplParams) self.assertEqual(message.get_charset(), 'utf-8') self.assertIsInstance(message['To'], basestring) self.assertEqual(message['To'], u'Hörbert M[at]ier <*****@*****.**>') self.assertIsInstance(message['From'], basestring) self.assertEqual(message['From'], u'Plone site <>') self.assertEqual(unicode(message['Subject']), u"You've been invited to Plone site") self.assertEqual(message.get_payload(None, True), expectedMessageText)
def test_owner(self): member_folder_owner = self.members.getOwner().getId() become_portal_user(self.portal, member_folder_owner) self.assertExpectedTraversability(MANAGE) self.assertCanDelete(USER_FOLDER) self.assert_can_add_to(USER_FOLDER)