def invitation_accepted(event): """ When an invitation is accepted, add the user to the team """ request = getRequest() storage = get_storage() if event.token_id not in storage: return ws_uid, username = storage[event.token_id] storage[event.token_id] acl_users = api.portal.get_tool('acl_users') acl_users.updateCredentials(request, request.response, username, None) catalog = api.portal.get_tool(name="portal_catalog") brain = catalog.unrestrictedSearchResults(UID=ws_uid)[0] with api.env.adopt_roles(["Manager"]): ws = IWorkspace(brain.getObject()) for name in ws.members: member = api.user.get(username=name) if member is not None: if member.getUserName() == username: api.portal.show_message( _('Oh boy, oh boy, you are already a member'), request, ) break else: ws.add_to_team(user=username) api.portal.show_message( _('Welcome to our family, Stranger'), request, )
def invitation_accepted(event): """ When an invitation is accepted, add the user to the team """ request = getRequest() storage = get_storage() if event.token_id not in storage: return ws_uid, username = storage[event.token_id] storage[event.token_id] acl_users = api.portal.get_tool("acl_users") acl_users.updateCredentials(request, request.response, username, None) catalog = api.portal.get_tool(name="portal_catalog") brain = catalog.unrestrictedSearchResults(UID=ws_uid)[0] with api.env.adopt_roles(["Manager"]): ws = IWorkspace(brain.getObject()) for name in ws.members: member = api.user.get(username=name) if member is not None: if member.getUserName() == username: api.portal.show_message(_("Oh boy, oh boy, you are already a member"), request) break else: ws.add_to_team(user=username) api.portal.show_message(_("Welcome to our family, Stranger"), request)
def invitation_accepted(event): """ When an invitation is accepted, add the user to the team. This apparently is NOT a ploneintranet.invitations invitation, but by ploneintranet.workspace.browser.forms.InviteForm. """ request = getRequest() storage = get_storage() if event.token_id not in storage: return ws_uid, userid = storage[event.token_id] # in a email_as_login setting (see #1043) # .userid == .username but .username != .getUserName() ... :-( username = api.user.get(userid=userid).getUserName() acl_users = api.portal.get_tool('acl_users') acl_users.updateCredentials( request, request.response, username, # the login, not the userid None ) catalog = api.portal.get_tool(name="portal_catalog") brain = catalog.unrestrictedSearchResults(UID=ws_uid)[0] with api.env.adopt_roles(["Manager"]): ws = IWorkspace(brain.getObject()) # collective.workspace .members returns userid iterator for member_id in ws.members: # don't clobber userid variable member = api.user.get(userid=member_id) if member is not None: if member.getId() == userid: api.portal.show_message( _('Oh boy, oh boy, you are already a member'), request, ) break else: # 'user' in this API is actually userid ws.add_to_team(user=userid) api.portal.show_message( _('Welcome to our family, Stranger'), request, )
def handleApply(self, action): data = self.extractData()[0] given_username = data.get("user", "").strip() given_message = data.get("message", "") or "" given_message = given_message.strip() workspace_title = safe_unicode(self.context.title) if not given_username: return ws = IWorkspace(self.context) for name in ws.members: member = api.user.get(username=name) if member is not None: if member.getUserName() == given_username: raise WidgetActionExecutionError( 'user', Invalid("User is already a member of this workspace")) user = api.user.get(username=given_username) email = user.getProperty("email") token_util = getUtility(ITokenUtility) token_id, token_url = token_util.generate_new_token( redirect_path="resolveuid/%s" % (ws.context.UID(),)) storage = get_storage() storage[token_id] = (ws.context.UID(), given_username) current_user = api.user.get_current() inviter = current_user.getProperty("fullname", None) if not inviter: inviter = current_user.getUserName() inviter = safe_unicode(inviter) msg_header = u"You have been invited to join %s by %s" % ( workspace_title, inviter) if given_message: optional = "Here is the message from %s\n\n" % inviter optional = "%s%s\n\n" % (optional, given_message) given_message = optional msg_footer = u""" The following is a unique URL tied to your email address ({email}). Following the link will make you a member of the {workspace} workspace automatically. {token_url} """.format( email=email, workspace=workspace_title, token_url=token_url) message = u"{header}\n\n{optional}{footer}".format( header=msg_header, optional=given_message, footer=msg_footer, ) subject = u'You are invited to join "%s"' % workspace_title send_email(email, subject, message) api.portal.show_message( 'Invitation sent to %s' % email, self.request, )
def handleApply(self, action): data = self.extractData()[0] given_userid = data.get("user", "").strip() given_message = data.get("message", "") or "" given_message = given_message.strip() workspace_title = safe_unicode(self.context.title) if not given_userid: return ws = IWorkspace(self.context) for name in ws.members: member = api.user.get(userid=name) if member is not None: if member.getId() == given_userid: raise WidgetActionExecutionError( 'user', Invalid("User is already a member of this workspace")) user = api.user.get(userid=given_userid) email = user.getProperty("email") token_util = getUtility(ITokenUtility) token_id, token_url = token_util.generate_new_token( redirect_path="resolveuid/%s" % (ws.context.UID(), )) storage = get_storage() storage[token_id] = (ws.context.UID(), given_userid) current_user = api.user.get_current() inviter = current_user.getProperty("fullname", None) if not inviter: inviter = current_user.getId() inviter = safe_unicode(inviter) msg_header = u"You have been invited to join %s by %s" % ( workspace_title, inviter) if given_message: optional = "Here is the message from %s\n\n" % inviter optional = "%s%s\n\n" % (optional, given_message) given_message = optional msg_footer = u""" The following is a unique URL tied to your email address ({email}). Following the link will make you a member of the {workspace} workspace automatically. {token_url} """.format(email=email, workspace=workspace_title, token_url=token_url) message = u"{header}\n\n{optional}{footer}".format( header=msg_header, optional=given_message, footer=msg_footer, ) subject = u'You are invited to join "%s"' % workspace_title send_email(email, subject, message) api.portal.show_message( 'Invitation sent to %s' % email, self.request, )