def before_update(self): invitations_schema = self.schema.get('invitations').children[0] schema_instance = InvitationSchema() roles_node = invitations_schema.get('roles') if has_role(role=('Moderator',)): roles_node.widget = roles_choice(roles_node, ['Moderator', 'Member', 'Examiner']) organization_node = schema_instance.get('organization') ismanager_node = schema_instance.get('ismanager') invitations_schema.children.append(organization_node) invitations_schema.children.append(ismanager_node) else: invitations_schema.children.remove(roles_node)
class EditInvitationView(FormView): title = _('Edit the invitation') schema = select(InvitationSchema(editable=True), [ 'title', 'user_title', 'roles', 'first_name', 'last_name', 'email', 'organization' ]) behaviors = [EditInvitation, Cancel] formid = 'formeditinvitation' name = 'editinvitation' def before_update(self): if not has_role(role=('Moderator', )): self.schema = select( InvitationSchema(editable=True), ['title', 'user_title', 'first_name', 'last_name', 'email']) self.action = self.request.resource_url( self.context, 'novaideoapi', query={ 'op': 'update_action_view', 'node_id': EditInvitation.node_definition.id }) self.schema.widget = deform.widget.FormWidget( css_class='deform novaideo-ajax-form') def default_data(self): return self.context
def start(self, context, request, appstruct, **kw): datas = context.get_data( select(omit(InvitationSchema(), ['_csrf_token_']), [ 'user_title', 'roles', 'first_name', 'last_name', 'email', 'organization' ])) roles = datas.pop('roles') password = appstruct['password'] datas['locale'] = my_locale_negotiator(request) person = Person(password=password, **datas) root = getSite(context) principals = find_service(root, 'principals') users = principals['users'] name = person.first_name + ' ' + person.last_name name = name_chooser(users, name=name) users[name] = person if getattr(context, 'ismanager', False) and \ context.organization: grant_roles(person, (('OrganizationResponsible', context.organization), )) person.state.append('active') grant_roles(person, roles) grant_roles(person, (('Owner', person), )) manager = context.manager root.delfromproperty('invitations', context) root.addtoproperty('news_letter_members', person) newsletters = root.get_newsletters_automatic_registration() email = getattr(person, 'email', '') if newsletters and email: for newsletter in newsletters: newsletter.subscribe(person.first_name, person.last_name, email) context.person = person if manager: mail_template = root.get_mail_template( 'accept_invitation', getattr(manager, 'user_locale', root.locale)) localizer = request.localizer email_data = get_user_data(person, 'user', request) novaideo_title = request.root.title roles_translate = [ localizer.translate(APPLICATION_ROLES.get(r, r)) for r in roles ] subject = mail_template['subject'].format( novaideo_title=novaideo_title, **email_data) email_data.update(get_user_data(manager, 'recipient', request)) email_data.update(get_entity_data(person, 'user', request)) message = mail_template['template'].format( roles=", ".join(roles_translate), novaideo_title=novaideo_title, **email_data) alert('email', [root.get_site_sender()], [manager.email], subject=subject, body=message) return {}
class InviteUsersSchema(Schema): invitations = colander.SchemaNode( colander.Sequence(), select(omit(InvitationSchema(factory=Invitation, editable=True, name='Invitation', widget=SimpleMappingWidget(css_class='object-well default-well')), ['_csrf_token_']), ['user_title', 'roles', 'first_name', 'last_name','email']), widget=SequenceWidget(min_len=1), title=_('The invitations') )
def before_update(self): if not has_role(role=('Moderator', )): self.schema = select( InvitationSchema(editable=True), ['title', 'user_title', 'first_name', 'last_name', 'email']) self.action = self.request.resource_url( self.context, 'novaideoapi', query={ 'op': 'update_action_view', 'node_id': EditInvitation.node_definition.id }) self.schema.widget = deform.widget.FormWidget( css_class='deform novaideo-ajax-form')